@besaitech/ng-design-system 0.0.67 → 0.0.69

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"besaitech-ng-design-system-charts.mjs","sources":["../../../projects/saitech-design-system/charts/chart-types.ts","../../../projects/saitech-design-system/charts/sds-chart-tooltip.ts","../../../projects/saitech-design-system/charts/chart-core.ts","../../../projects/saitech-design-system/charts/chart-parts.ts","../../../projects/saitech-design-system/charts/sds-line-chart.ts","../../../projects/saitech-design-system/charts/sds-bar-chart.ts","../../../projects/saitech-design-system/charts/sds-scatter-chart.ts","../../../projects/saitech-design-system/charts/sds-donut-chart.ts","../../../projects/saitech-design-system/charts/sds-heatmap.ts","../../../projects/saitech-design-system/charts/sds-treemap.ts","../../../projects/saitech-design-system/charts/sds-sparkline.ts","../../../projects/saitech-design-system/charts/sds-kpi.ts","../../../projects/saitech-design-system/charts/public-api.ts","../../../projects/saitech-design-system/charts/besaitech-ng-design-system-charts.ts"],"sourcesContent":["\n/*\n * Public vocabulary shared by the whole sds-*-chart family. Every chart reads its data the same way —\n * an array of plain rows plus accessors — so an API response can be charted without reshaping it, and\n * switching a line chart to a bar chart is a selector change, not a data migration.\n */\n\n/** A value the x / category axis can carry. ISO date strings (`2026-03-01`) are read as dates. */\nexport type SdsXValue = string | number | Date;\n\n/**\n * How a chart reads a field from a row: either the property name, or a function. The function form\n * covers derived values (`row => row.cost / row.units`) and nested data (`row => row.stats.total`).\n */\nexport type SdsAccessor<T, R> = (keyof T & string) | ((row: T, index: number) => R);\n\n/** A number format: `Intl.NumberFormatOptions` (locale-aware, the default) or your own function. */\nexport type SdsNumberFormat = Intl.NumberFormatOptions | ((value: number) => string);\n\n/**\n * An x-axis format. Options objects are interpreted from the axis kind: `Intl.DateTimeFormatOptions`\n * on a time axis, `Intl.NumberFormatOptions` on a numeric one. Category axes print the value as-is\n * unless a function is given.\n */\nexport type SdsXFormat =\n | Intl.DateTimeFormatOptions\n | Intl.NumberFormatOptions\n | ((value: SdsXValue) => string);\n\n/** What the x axis is. `auto` infers it from the data: Date / ISO string → time, number → linear. */\nexport type SdsChartXType = 'auto' | 'time' | 'linear' | 'category';\n/** Value-axis scale. `log` needs strictly positive values (non-positive points are dropped). */\nexport type SdsChartScale = 'linear' | 'log';\n/**\n * Where the legend sits. `auto` picks the chart's natural place (top for two or more series, none for\n * one; right for a donut). `right` falls back to below on narrow containers.\n */\nexport type SdsChartLegend = 'auto' | 'top' | 'bottom' | 'right' | 'none';\n/** Which gridlines to draw. They are always solid hairlines, never dashed. */\nexport type SdsChartGrid = 'y' | 'x' | 'both' | 'none';\n/** Stacking: `stacked` piles the series, `percent` normalises every stack to 100 %. */\nexport type SdsChartStack = 'none' | 'stacked' | 'percent';\n/** Semantic tone for annotations and single-colour charts. */\nexport type SdsChartTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';\n\n/** One plotted measure. `key` is both the row property it reads and the series' identity. */\nexport interface SdsChartSeries<T = any> {\n /** Row property holding the value — and the stable id used for colour, legend and toggling. */\n key: string;\n /** Human label (legend, tooltip, table header). Defaults to `key`. */\n label?: string;\n /** Read the value with a function instead of `row[key]` (derived or nested values). */\n value?: (row: T, index: number) => number | null | undefined;\n /** Any CSS colour, including `var(--token)`. Defaults to the categorical slot of its index. */\n color?: string;\n /** Per-series value format (tooltip, labels, table). Falls back to the chart's `valueFormat`. */\n format?: SdsNumberFormat;\n /** Line charts: draw dashed — a forecast, a target or a projection. */\n dashed?: boolean;\n /** Bar charts: draw this series as a line over the bars (a combo chart, on the SAME axis). */\n type?: 'bar' | 'line';\n}\n\n/** A horizontal/vertical reference line — a target, a threshold, a mean. */\nexport interface SdsChartReferenceLine {\n type: 'line';\n /** `y` (default) draws across the plot at a value; `x` draws down it at an x position. */\n axis?: 'x' | 'y';\n value: SdsXValue;\n label?: string;\n tone?: SdsChartTone;\n}\n\n/** A shaded range — a normal range, a target zone, a holiday period. */\nexport interface SdsChartReferenceBand {\n type: 'band';\n axis?: 'x' | 'y';\n from: SdsXValue;\n to: SdsXValue;\n label?: string;\n tone?: SdsChartTone;\n}\n\nexport type SdsChartAnnotation = SdsChartReferenceLine | SdsChartReferenceBand;\n\n/** One line of the tooltip. `value` is already formatted; `raw` is the number behind it. */\nexport interface SdsChartTooltipRow {\n key: string;\n label: string;\n value: string;\n raw: number | null;\n color: string;\n /** Shape of the key glyph: a short line for lines, a square for bars/areas/slices, a dot for points. */\n shape: 'line' | 'rect' | 'dot';\n}\n\n/** Context handed to a custom `<ng-template sdsChartTooltip let-tip>` template. */\nexport interface SdsChartTooltipContext<T = any> {\n /** Formatted heading (the x value, the category, the slice…). */\n title: string;\n rows: SdsChartTooltipRow[];\n /** Optional footer line (a total, a share…). */\n footer?: string;\n /** The source row(s) behind the hovered position. */\n data: T[];\n index: number;\n}\n\n/** Emitted when a mark is clicked (or activated with Enter on the keyboard). */\nexport interface SdsChartPointEvent<T = any> {\n /** Series key — or the slice / cell / node id on charts without series. */\n key: string;\n /** The source row (null when the mark aggregates several rows, e.g. the \"Other\" slice). */\n row: T | null;\n index: number;\n value: number | null;\n x?: SdsXValue;\n /** The row dimension (heatmap). */\n y?: SdsXValue;\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { SdsChartTooltipContext } from './chart-types';\n\n/**\n * Replace a chart's default tooltip body with your own markup. The template receives the hovered\n * position as `$implicit` ({ title, rows, footer, data, index }) — `data` holds the source rows, so the\n * tooltip can show fields the chart does not plot (a comment, a status, a unit).\n *\n * Works on line, bar, scatter, donut, heatmap and treemap charts (not the sparkline). The chart still\n * positions, flips and clamps the box; you style the body. The box is visual and pointer-transparent:\n * never put links or buttons in it, and keep anything essential in the plotted data too — keyboard and\n * screen-reader users get the default rows through the live region and the table twin.\n *\n * @example\n * <sds-line-chart [data]=\"rows\" x=\"day\" [series]=\"series\">\n * <ng-template sdsChartTooltip let-tip>\n * <p class=\"font-semibold\">{{ tip.title }}</p>\n * <p>{{ tip.data[0].comment }}</p>\n * </ng-template>\n * </sds-line-chart>\n */\n@Directive({ selector: 'ng-template[sdsChartTooltip]' })\nexport class SdsChartTooltip {\n readonly template = inject<TemplateRef<{ $implicit: SdsChartTooltipContext }>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: SdsChartTooltip,\n ctx: unknown,\n ): ctx is { $implicit: SdsChartTooltipContext } {\n return true;\n }\n}\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n LOCALE_ID,\n PLATFORM_ID,\n Signal,\n signal,\n untracked,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { SDS_CHART_CONFIG, SDS_CHART_LABELS_EN, SdsChartLabels } from '@besaitech/ng-design-system';\nimport {\n SdsAccessor,\n SdsChartAnnotation,\n SdsChartTone,\n SdsNumberFormat,\n SdsXFormat,\n SdsXValue,\n} from './chart-types';\n\n/*\n * Internal engine shared by every chart. Nothing here is exported from the public API: the charts\n * delegate the maths to d3 (scales, shapes, layouts) and keep rendering, theming and interaction in\n * Angular — so a chart is plain SVG bound to signals, SSR-safe, OnPush, and themed by CSS tokens.\n */\n\n// ---------------------------------------------------------------------------------------------------\n// Data access\n// ---------------------------------------------------------------------------------------------------\n\nexport function access<T, R>(acc: SdsAccessor<T, R>, row: T, index: number): R {\n return typeof acc === 'function' ? acc(row, index) : ((row as Record<string, unknown>)[acc] as R);\n}\n\n/** A finite number, or null for null / undefined / NaN / non-numeric input. */\n/** Input transform: a number attribute that keeps `null` (\"auto\") — `height=\"240\"` and `[height]=\"null\"` both work. */\nexport function numberOrNull(v: unknown): number | null {\n if (v === null || v === undefined || v === '') return null;\n const n = Number(v);\n return Number.isFinite(n) ? n : null;\n}\n\nexport function num(v: unknown): number | null {\n if (v === null || v === undefined || v === '') return null;\n const n = typeof v === 'number' ? v : Number(v);\n return Number.isFinite(n) ? n : null;\n}\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst ISO_DATETIME = /^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}/;\n\n/**\n * Normalise an x value. A date-only ISO string is built as a LOCAL date (not `new Date(str)`, which is\n * UTC midnight and lands on the previous day west of Greenwich); a full ISO timestamp keeps its zone.\n */\nexport function toX(v: SdsXValue | null | undefined): SdsXValue | null {\n if (v === null || v === undefined) return null;\n if (v instanceof Date) return Number.isNaN(v.getTime()) ? null : v;\n if (typeof v === 'string') {\n if (ISO_DATE.test(v)) {\n const [y, m, d] = v.split('-').map(Number);\n return new Date(y, m - 1, d);\n }\n if (ISO_DATETIME.test(v)) {\n const d = new Date(v);\n return Number.isNaN(d.getTime()) ? v : d;\n }\n }\n return v;\n}\n\nexport type XKind = 'time' | 'linear' | 'category';\n\nexport function inferXKind(values: readonly (SdsXValue | null)[], declared: string): XKind {\n if (declared === 'time' || declared === 'linear' || declared === 'category') return declared;\n const sample = values.filter((v) => v !== null);\n if (sample.length && sample.every((v) => v instanceof Date)) return 'time';\n if (sample.length && sample.every((v) => typeof v === 'number')) return 'linear';\n return 'category';\n}\n\n/** A stable string identity for an x value (used for tween keys and category lookups). */\nexport function xKey(v: SdsXValue | null): string {\n if (v === null) return '∅';\n return v instanceof Date ? `t${v.getTime()}` : String(v);\n}\n\nexport function asTime(v: SdsXValue): number {\n return v instanceof Date ? v.getTime() : typeof v === 'number' ? v : (toX(v) as Date)?.getTime?.() ?? NaN;\n}\n\n// ---------------------------------------------------------------------------------------------------\n// Colour\n// ---------------------------------------------------------------------------------------------------\n\n/** The fallback hexes mirror themes/base.css so a chart still reads if base.css was not imported. */\nconst SLOT_FALLBACK = ['#2a78d6', '#eb6834', '#1baf7a', '#eda100', '#e87ba4', '#008300', '#4a3aa7', '#e34948'];\nconst OVERFLOW = 'var(--color-ink-faint, #8a93a6)';\n\n/**\n * Categorical colour for a series position. Never cycles: a ninth series is a neutral gray, because a\n * re-used hue is indistinguishable from its twin — fold the tail into \"Other\" or facet instead.\n */\nexport function slotColor(index: number, palette?: readonly string[]): string {\n if (palette?.length) return palette[index] ?? OVERFLOW;\n if (index < 0 || index >= SLOT_FALLBACK.length) return OVERFLOW;\n return `var(--sds-chart-${index + 1}, ${SLOT_FALLBACK[index]})`;\n}\n\nexport function toneColor(tone: SdsChartTone | undefined): string {\n switch (tone) {\n case 'brand':\n return 'var(--color-brand-500)';\n case 'success':\n return 'var(--color-success)';\n case 'warning':\n return 'var(--color-warning)';\n case 'danger':\n return 'var(--color-danger)';\n default:\n return 'var(--color-ink-faint)';\n }\n}\n\n/** A CSS colour `t` (0–1) of the way along a two-stop ramp, mixed by the browser in OKLab. */\nexport function mix(from: string, to: string, t: number): string {\n const pct = Math.round(Math.max(0, Math.min(1, t)) * 1000) / 10;\n return `color-mix(in oklab, ${to} ${pct}%, ${from})`;\n}\n\nexport const SEQ_0 = 'var(--sds-chart-seq-0, #e3eefc)';\nexport const SEQ_1 = 'var(--sds-chart-seq-1, #0d366b)';\nexport const DIV_NEG = 'var(--sds-chart-div-neg, #d03b3b)';\nexport const DIV_MID = 'var(--sds-chart-div-mid, #efeeeb)';\nexport const DIV_POS = 'var(--sds-chart-div-pos, #1c5cab)';\nexport const INK_LO = 'var(--sds-chart-ink-lo, #1b2440)';\nexport const INK_HI = 'var(--sds-chart-ink-hi, #ffffff)';\n\n// ---------------------------------------------------------------------------------------------------\n// Locale & formatting\n// ---------------------------------------------------------------------------------------------------\n\n/** Resolve the chart locale: explicit input → provideSdsCharts() → Angular LOCALE_ID → en-GB. */\nexport function chartLocale(explicit: () => string | null): Signal<string> {\n const config = inject(SDS_CHART_CONFIG, { optional: true });\n const ngLocale = inject(LOCALE_ID);\n return computed(() => {\n const own = explicit();\n if (own) return own;\n const cfg = config?.locale;\n const resolved = typeof cfg === 'function' ? cfg() : cfg;\n return resolved || ngLocale || 'en-GB';\n });\n}\n\n/**\n * The chart strings: provideSdsCharts({ labels }) merged over the English defaults. The function\n * form is called inside the computed, so labels returned from a signal switch language live.\n */\nexport function chartLabels(): Signal<SdsChartLabels> {\n const config = inject(SDS_CHART_CONFIG, { optional: true });\n return computed(() => {\n const own = config?.labels;\n const resolved = typeof own === 'function' ? own() : own;\n return resolved ? { ...SDS_CHART_LABELS_EN, ...resolved } : SDS_CHART_LABELS_EN;\n });\n}\n\nexport function chartAnimates(explicit: () => boolean): Signal<boolean> {\n const config = inject(SDS_CHART_CONFIG, { optional: true });\n return computed(() => explicit() && config?.animate !== false);\n}\n\nexport function chartPalette(): readonly string[] | undefined {\n return inject(SDS_CHART_CONFIG, { optional: true })?.palette;\n}\n\nconst numberCache = new Map<string, Intl.NumberFormat>();\nconst dateCache = new Map<string, Intl.DateTimeFormat>();\n\nfunction nf(locale: string, opts: Intl.NumberFormatOptions): Intl.NumberFormat {\n const key = locale + JSON.stringify(opts);\n let f = numberCache.get(key);\n if (!f) {\n try {\n f = new Intl.NumberFormat(locale, opts);\n } catch {\n f = new Intl.NumberFormat('en', opts);\n }\n numberCache.set(key, f);\n }\n return f;\n}\n\nfunction df(locale: string, opts: Intl.DateTimeFormatOptions): Intl.DateTimeFormat {\n const key = locale + JSON.stringify(opts);\n let f = dateCache.get(key);\n if (!f) {\n try {\n f = new Intl.DateTimeFormat(locale, opts);\n } catch {\n f = new Intl.DateTimeFormat('en', opts);\n }\n dateCache.set(key, f);\n }\n return f;\n}\n\nexport type Fmt = (v: number) => string;\n\nexport const VALUE_DEFAULT: Intl.NumberFormatOptions = { maximumFractionDigits: 2 };\nexport const PERCENT_AXIS: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\nexport const PERCENT_VALUE: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 1 };\n\n/** A full-precision value formatter (tooltips, labels, tables). */\nexport function valueFormatter(locale: string, fmt: SdsNumberFormat | null | undefined, fallback = VALUE_DEFAULT): Fmt {\n if (typeof fmt === 'function') return fmt;\n const f = nf(locale, fmt ?? fallback);\n return (v) => f.format(v);\n}\n\n/**\n * An axis-tick formatter. Unless the caller gave one explicitly it is derived from the value format —\n * same currency / unit / percent style — but compacted (1 200 000 € → 1,2 M €) so ticks stay short.\n */\nexport function axisFormatter(\n locale: string,\n axisFmt: SdsNumberFormat | null | undefined,\n valueFmt: SdsNumberFormat | null | undefined,\n digits = 1,\n): Fmt {\n if (axisFmt) return valueFormatter(locale, axisFmt);\n if (typeof valueFmt === 'function') return valueFmt;\n const base: Intl.NumberFormatOptions = valueFmt ? { ...valueFmt } : {};\n if (base.style === 'percent') return valueFormatter(locale, { ...base, maximumFractionDigits: Math.max(base.maximumFractionDigits ?? 0, digits - 1) });\n delete base.minimumFractionDigits;\n delete base.maximumSignificantDigits;\n delete base.minimumSignificantDigits;\n const f = nf(locale, { ...base, notation: 'compact', maximumFractionDigits: digits });\n return (v) => f.format(v);\n}\n\n/**\n * Tick labels that never repeat: compact notation rounds close ticks to the same text (\"1 M, 1 M,\n * 1,1 M\"), so add precision until every label is distinct (up to 4 digits).\n */\nexport function uniqueLabels(values: readonly number[], make: (digits: number) => Fmt): string[] {\n let labels: string[] = [];\n for (let d = 1; d <= 4; d++) {\n const f = make(d);\n labels = values.map((v) => f(v));\n if (new Set(labels).size === labels.length) break;\n }\n return labels;\n}\n\n/**\n * A d3 stack offset like `stackOffsetDiverging`, except a zero sits ON the running positive total\n * instead of dropping to the baseline — so a stacked line with a 0 (or a missing value) between two\n * points does not plunge to the axis through the series beneath it.\n */\nexport function stackOffsetSigned(series: Array<Array<[number, number]>>, order: Iterable<number>): void {\n const idx = Array.from(order);\n const n = series.length;\n if (!n) return;\n const m = series[idx[0]].length;\n for (let j = 0; j < m; ++j) {\n let yp = 0;\n let yn = 0;\n for (let i = 0; i < n; ++i) {\n const d = series[idx[i]][j];\n const dy = d[1] - d[0];\n if (dy > 0) {\n d[0] = yp;\n d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn;\n d[0] = yn += dy;\n } else {\n d[0] = yp;\n d[1] = yp;\n }\n }\n }\n}\n\nconst DAY = 864e5;\n/** Slack for clock changes: local midnights across a DST switch are 23 h or 25 h apart. */\nconst NEAR = 3 * 3600e3;\n\n/** Smallest gap between consecutive timestamps — the data's granularity. */\nexport function timeGranularity(times: readonly number[]): number {\n let min = Infinity;\n for (let i = 1; i < times.length; i++) {\n const d = Math.abs(times[i] - times[i - 1]);\n if (d > 0 && d < min) min = d;\n }\n return min === Infinity ? DAY : min;\n}\n\n/** Format a single date at the precision the data actually has (tooltip heading, table cell). */\nexport function dateFormatter(locale: string, granularity: number, fmt?: SdsXFormat | null): (d: Date) => string {\n if (typeof fmt === 'function') return (d) => fmt(d);\n if (fmt) {\n const f = df(locale, fmt as Intl.DateTimeFormatOptions);\n return (d) => f.format(d);\n }\n const opts: Intl.DateTimeFormatOptions =\n granularity >= 360 * DAY - NEAR\n ? { year: 'numeric' }\n : granularity >= 28 * DAY - NEAR\n ? { month: 'long', year: 'numeric' }\n : granularity >= DAY - NEAR\n ? { day: 'numeric', month: 'short', year: 'numeric' }\n : { day: 'numeric', month: 'short', hour: '2-digit', minute: '2-digit' };\n const f = df(locale, opts);\n return (d) => f.format(d);\n}\n\n/**\n * Multi-scale time-tick labels, in the spirit of d3's default: each tick prints only what changed —\n * the year on January (and the first tick), the day at midnight on an hourly axis, and so on.\n */\nexport function timeTickFormatter(locale: string, ticks: readonly Date[], fmt?: SdsXFormat | null): (d: Date, i: number) => string {\n if (typeof fmt === 'function') return (d) => fmt(d);\n if (fmt) {\n const f = df(locale, fmt as Intl.DateTimeFormatOptions);\n return (d) => f.format(d);\n }\n const step = ticks.length > 1 ? ticks[1].getTime() - ticks[0].getTime() : DAY;\n if (step >= 360 * DAY - NEAR) {\n const y = df(locale, { year: 'numeric' });\n return (d) => y.format(d);\n }\n if (step >= 28 * DAY - NEAR) {\n const m = df(locale, { month: 'short' });\n const my = df(locale, { month: 'short', year: 'numeric' });\n return (d, i) => (i === 0 || d.getMonth() === 0 ? my : m).format(d);\n }\n if (step >= DAY - NEAR) {\n const dm = df(locale, { day: 'numeric', month: 'short' });\n return (d) => dm.format(d);\n }\n const hm = df(locale, { hour: '2-digit', minute: '2-digit' });\n const dm = df(locale, { day: 'numeric', month: 'short' });\n return (d, i) => (i === 0 || (d.getHours() === 0 && d.getMinutes() === 0) ? dm : hm).format(d);\n}\n\n/** Format any x value for display (tooltip title, table cell, category label). */\nexport function xFormatter(kind: XKind, locale: string, fmt: SdsXFormat | null | undefined, granularity: number): (v: SdsXValue) => string {\n if (typeof fmt === 'function') return fmt;\n if (kind === 'time') {\n const f = dateFormatter(locale, granularity, fmt);\n return (v) => (v instanceof Date ? f(v) : String(v));\n }\n if (kind === 'linear') {\n const f = valueFormatter(locale, (fmt as Intl.NumberFormatOptions) ?? null);\n return (v) => (typeof v === 'number' ? f(v) : String(v));\n }\n return (v) => (v instanceof Date ? dateFormatter(locale, DAY)(v) : String(v));\n}\n\n// ---------------------------------------------------------------------------------------------------\n// Text measurement (axis margins, label fitting)\n// ---------------------------------------------------------------------------------------------------\n\nlet ctx: CanvasRenderingContext2D | null | undefined;\nlet family = 'Inter, system-ui, sans-serif';\n\n/** Rendered width of a label in px. Canvas-measured in the browser, estimated on the server. */\nexport function textWidth(text: string, size = 11, weight = 400): number {\n if (ctx === undefined) {\n try {\n ctx = typeof document !== 'undefined' ? document.createElement('canvas').getContext('2d') : null;\n if (ctx && typeof getComputedStyle !== 'undefined') family = getComputedStyle(document.body).fontFamily || family;\n } catch {\n ctx = null;\n }\n }\n if (!ctx) return text.length * size * 0.58;\n ctx.font = `${weight} ${size}px ${family}`;\n return ctx.measureText(text).width;\n}\n\n/** Truncate a label with an ellipsis so it fits `max` px. */\nexport function fitText(text: string, max: number, size = 11, weight = 400): string {\n if (textWidth(text, size, weight) <= max) return text;\n let lo = 0;\n let hi = text.length;\n while (lo < hi) {\n const mid = (lo + hi + 1) >> 1;\n if (textWidth(text.slice(0, mid) + '…', size, weight) <= max) lo = mid;\n else hi = mid - 1;\n }\n return lo > 0 ? text.slice(0, lo) + '…' : '';\n}\n\n// ---------------------------------------------------------------------------------------------------\n// Geometry\n// ---------------------------------------------------------------------------------------------------\n\nexport interface PlotRect {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nexport interface AxisTick {\n pos: number;\n label: string;\n}\n\n/**\n * A bar with a rounded DATA end and a square baseline end — the bar \"grows\" from its baseline.\n * `end` is the side that carries the value.\n */\nexport function barPath(x: number, y: number, w: number, h: number, radius: number, end: 'top' | 'bottom' | 'left' | 'right'): string {\n if (w <= 0 || h <= 0) return '';\n const vertical = end === 'top' || end === 'bottom';\n const r = Math.max(0, Math.min(radius, vertical ? w / 2 : h / 2, vertical ? h : w));\n const x2 = x + w;\n const y2 = y + h;\n if (r === 0) return `M${x},${y}H${x2}V${y2}H${x}Z`;\n switch (end) {\n case 'top':\n return `M${x},${y2}V${y + r}A${r},${r} 0 0 1 ${x + r},${y}H${x2 - r}A${r},${r} 0 0 1 ${x2},${y + r}V${y2}Z`;\n case 'bottom':\n return `M${x},${y}H${x2}V${y2 - r}A${r},${r} 0 0 1 ${x2 - r},${y2}H${x + r}A${r},${r} 0 0 1 ${x},${y2 - r}Z`;\n case 'right':\n return `M${x},${y}H${x2 - r}A${r},${r} 0 0 1 ${x2},${y + r}V${y2 - r}A${r},${r} 0 0 1 ${x2 - r},${y2}H${x}Z`;\n case 'left':\n return `M${x2},${y}V${y2}H${x + r}A${r},${r} 0 0 1 ${x},${y2 - r}V${y + r}A${r},${r} 0 0 1 ${x + r},${y}Z`;\n }\n}\n\nexport interface ResolvedAnnotation {\n kind: 'line' | 'band';\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n label: string;\n color: string;\n labelX: number;\n labelY: number;\n anchor: 'start' | 'middle' | 'end';\n}\n\n/**\n * Map annotations to pixels. `mapX` / `mapY` return null for a value off the scale, which drops it.\n * Band edges are clamped to the plot so a partially-visible range still shades its visible part.\n */\nexport function resolveAnnotations(\n list: readonly SdsChartAnnotation[],\n plot: PlotRect,\n mapX: (v: SdsXValue) => number | null,\n mapY: (v: SdsXValue) => number | null,\n): ResolvedAnnotation[] {\n const out: ResolvedAnnotation[] = [];\n const right = plot.left + plot.width;\n const bottom = plot.top + plot.height;\n const clampX = (v: number) => Math.max(plot.left, Math.min(right, v));\n const clampY = (v: number) => Math.max(plot.top, Math.min(bottom, v));\n for (const a of list) {\n const axis = a.axis ?? 'y';\n const color = toneColor(a.tone);\n const label = a.label ?? '';\n const map = axis === 'y' ? mapY : mapX;\n if (a.type === 'line') {\n const p = map(a.value);\n if (p === null || !Number.isFinite(p)) continue;\n if (axis === 'y') {\n if (p < plot.top - 0.5 || p > bottom + 0.5) continue;\n out.push({ kind: 'line', x1: plot.left, x2: right, y1: p, y2: p, label, color, labelX: right - 4, labelY: p - 5, anchor: 'end' });\n } else {\n if (p < plot.left - 0.5 || p > right + 0.5) continue;\n // Label above the plot, centred on the line, so it never sits on top of a mark.\n out.push({ kind: 'line', x1: p, x2: p, y1: plot.top, y2: bottom, label, color, labelX: p, labelY: plot.top - 6, anchor: 'middle' });\n }\n } else {\n const p1 = map(a.from);\n const p2 = map(a.to);\n if (p1 === null || p2 === null || !Number.isFinite(p1) || !Number.isFinite(p2)) continue;\n if (axis === 'y') {\n const y1 = clampY(Math.min(p1, p2));\n const y2 = clampY(Math.max(p1, p2));\n if (y2 - y1 < 0.5) continue;\n out.push({ kind: 'band', x1: plot.left, x2: right, y1, y2, label, color, labelX: right - 4, labelY: y1 + 12, anchor: 'end' });\n } else {\n const x1 = clampX(Math.min(p1, p2));\n const x2 = clampX(Math.max(p1, p2));\n if (x2 - x1 < 0.5) continue;\n out.push({ kind: 'band', x1, x2, y1: plot.top, y2: bottom, label, color, labelX: x1 + 4, labelY: plot.top + 10, anchor: 'start' });\n }\n }\n }\n return out;\n}\n\n/** Every annotation value that lands on the value axis — folded into the y domain so a target is visible. */\nexport function annotationValues(list: readonly SdsChartAnnotation[], axis: 'x' | 'y'): number[] {\n const out: number[] = [];\n for (const a of list) {\n if ((a.axis ?? 'y') !== axis) continue;\n const vals = a.type === 'line' ? [a.value] : [a.from, a.to];\n for (const v of vals) {\n const n = typeof v === 'number' ? v : v instanceof Date ? v.getTime() : num(v);\n if (n !== null) out.push(n);\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------------------------------\n// Size, motion & identity\n// ---------------------------------------------------------------------------------------------------\n\nlet uidSeq = 0;\nexport function chartUid(prefix: string): string {\n return `${prefix}-${++uidSeq}`;\n}\n\n/** Fallback width used for server rendering (the SVG scales via its viewBox until hydrated). */\nexport const SSR_WIDTH = 640;\n\n/**\n * The host's content width, tracked with a ResizeObserver. 0 until measured in the browser — charts\n * render nothing until then so the entrance animation starts at the real size, not a guessed one.\n */\nexport function hostWidth(): Signal<number> {\n const host = inject<ElementRef<HTMLElement>>(ElementRef);\n const browser = isPlatformBrowser(inject(PLATFORM_ID));\n const destroyRef = inject(DestroyRef);\n const width = signal(browser ? 0 : SSR_WIDTH);\n if (browser) {\n afterNextRender(() => {\n const el = host.nativeElement;\n // The content box — what ResizeObserver's contentRect reports later — so padding on the host\n // never makes the first layout wider than the next one (which would restart the entrance).\n const cs = getComputedStyle(el);\n const pad = (parseFloat(cs.paddingLeft) || 0) + (parseFloat(cs.paddingRight) || 0) + (parseFloat(cs.borderLeftWidth) || 0) + (parseFloat(cs.borderRightWidth) || 0);\n width.set(Math.floor(el.getBoundingClientRect().width - pad));\n if (typeof ResizeObserver === 'undefined') return;\n let frame = 0;\n const ro = new ResizeObserver((entries) => {\n const w = Math.floor(entries[0]?.contentRect.width ?? 0);\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => width.set(w));\n });\n ro.observe(el);\n destroyRef.onDestroy(() => {\n cancelAnimationFrame(frame);\n ro.disconnect();\n });\n });\n }\n return width;\n}\n\nfunction reducedMotion(): boolean {\n try {\n return typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n } catch {\n return false;\n }\n}\n\nconst easeOutCubic = (t: number) => 1 - Math.pow(1 - t, 3);\n\nexport type Geometry = ReadonlyMap<string, readonly number[]>;\n\nexport interface TweenOptions {\n /** Target geometry: key → numbers (pixels / angles). */\n target: () => Geometry;\n /** Changes when the DATA changes. A target change without a version change (a resize) snaps. */\n version: () => unknown;\n enabled: () => boolean;\n /**\n * Starting numbers for a key that was not on screen before. `initial` is true on the chart's\n * first paint (the entrance), false for a mark that appears on a later update.\n */\n enter?: (key: string, to: readonly number[], initial: boolean) => readonly number[];\n duration?: number;\n}\n\nconst UNSET = Symbol('unset');\n\n/**\n * Animate keyed geometry between renders. Marks are matched by key, so on a data update each bar /\n * point / slice glides from where it WAS painted to where it now belongs; new marks enter from\n * `enter()`; removed marks simply leave. Resizes snap (no animation), and so does everything when the\n * reader prefers reduced motion or the chart sets [animate]=\"false\".\n */\nexport function createTween(opts: TweenOptions): Signal<Geometry> {\n const browser = isPlatformBrowser(inject(PLATFORM_ID));\n const duration = opts.duration ?? 650;\n const enter = opts.enter ?? ((_k: string, to: readonly number[], _initial: boolean) => to);\n const progress = signal(1);\n let from: Geometry = new Map();\n let shown: Geometry = new Map();\n let lastVersion: unknown = UNSET;\n let frame = 0;\n const cancel = () => {\n if (frame) cancelAnimationFrame(frame);\n frame = 0;\n };\n inject(DestroyRef).onDestroy(cancel);\n\n effect(() => {\n opts.target();\n const version = opts.version();\n untracked(() => {\n if (version === lastVersion) return;\n lastVersion = version;\n if (!browser || !opts.enabled() || reducedMotion()) {\n cancel();\n progress.set(1);\n return;\n }\n from = shown;\n cancel();\n progress.set(0);\n const start = performance.now();\n const step = (now: number) => {\n const p = Math.min(1, (now - start) / duration);\n progress.set(p);\n frame = p < 1 ? requestAnimationFrame(step) : 0;\n };\n frame = requestAnimationFrame(step);\n });\n });\n\n return computed(() => {\n const to = opts.target();\n const p = progress();\n if (p >= 1) {\n shown = to;\n return to;\n }\n const e = easeOutCubic(p);\n const initial = from.size === 0;\n const out = new Map<string, readonly number[]>();\n for (const [k, b] of to) {\n const a = from.get(k) ?? enter(k, b, initial);\n out.set(\n k,\n b.map((bv, i) => {\n const av = a[i] ?? bv;\n return av + (bv - av) * e;\n }),\n );\n }\n shown = out;\n return out;\n });\n}\n\n/** Nice tick count for an axis length (≈ one tick per `spacing` px, at least 2). */\nexport function tickCount(length: number, spacing: number): number {\n return Math.max(2, Math.round(length / spacing));\n}\n","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { SdsIcon } from '@besaitech/ng-design-system';\nimport { SdsChartTooltipContext } from './chart-types';\nimport { AxisTick, chartLabels, fitText, PlotRect, ResolvedAnnotation, textWidth } from './chart-core';\n\n/*\n * Internal building blocks shared by the chart family — not part of the public API. Every chart is\n * <sds-chart-frame> (heading, legend, table view, empty / loading states) around an <svg> that uses\n * the axes + annotation layers, with one <sds-chart-tooltip-box> floating over it.\n */\n\nexport interface LegendItem {\n key: string;\n label: string;\n color: string;\n shape: 'line' | 'rect' | 'dot';\n /** Optional trailing text — a value or a share (the donut's direct labels). */\n detail?: string;\n dashed?: boolean;\n}\n\nexport interface ChartTable {\n columns: string[];\n rows: string[][];\n}\n\nexport type FrameLegend = 'top' | 'bottom' | 'right' | 'none';\n\n/**\n * Category tick labels that do not fit their slot: truncate with an ellipsis while a useful stub\n * remains (the full label stays in the tooltip and the table), otherwise keep every n-th label.\n */\nexport function thinOrTruncate(ticks: AxisTick[], step: number): AxisTick[] {\n const room = step - 8;\n const widest = Math.max(0, ...ticks.map((t) => textWidth(t.label)));\n if (widest <= room) return ticks;\n if (room >= 44) return ticks.map((t) => ({ ...t, label: fitText(t.label, room) }));\n const every = Math.max(1, Math.ceil((widest + 12) / step));\n return ticks.filter((_, i) => i % every === 0);\n}\n\n/** Heading, legend, table view and empty / loading states around a plot. */\n@Component({\n selector: 'sds-chart-frame',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon, NgTemplateOutlet],\n host: { class: 'block @container' },\n template: `\n <figure class=\"m-0 flex flex-col gap-3\" [attr.aria-busy]=\"loading() || null\">\n @if (heading() || subtitle() || tableToggle()) {\n <figcaption class=\"flex items-start justify-between gap-3\">\n <div class=\"min-w-0\">\n @if (heading()) {\n <p class=\"text-sm font-semibold text-ink\">{{ heading() }}</p>\n }\n @if (subtitle()) {\n <p class=\"mt-0.5 text-xs text-ink-faint\">{{ subtitle() }}</p>\n }\n </div>\n @if (tableToggle()) {\n <button\n type=\"button\"\n class=\"inline-flex h-8 shrink-0 items-center gap-1.5 rounded-control px-2.5 text-xs font-medium text-ink-soft transition-colors hover:bg-muted hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n (click)=\"showTable.set(!showTable())\"\n >\n <sds-icon [name]=\"showTable() ? 'chart-column' : 'table'\" [size]=\"14\" />\n {{ showTable() ? text().showChart : text().showTable }}\n </button>\n }\n </figcaption>\n }\n\n <div class=\"flex flex-col gap-3\" [class.@lg:flex-row]=\"legend() === 'right'\" [class.@lg:items-center]=\"legend() === 'right'\">\n @if (legend() === 'top' && items().length) {\n <ng-container [ngTemplateOutlet]=\"legendTpl\" />\n }\n <div class=\"relative min-w-0 flex-1\">\n @if (empty()) {\n <div\n class=\"grid place-items-center rounded-card border border-dashed border-border text-center\"\n [style.height.px]=\"height()\"\n >\n <div class=\"flex flex-col items-center gap-2 px-4 text-ink-faint\">\n <sds-icon name=\"bar-chart-3\" [size]=\"22\" />\n <p class=\"text-sm\">{{ emptyText() || text().empty }}</p>\n </div>\n </div>\n } @else if (showTable()) {\n <div class=\"overflow-auto rounded-card border border-border\" [style.max-height.px]=\"height()\">\n <ng-container [ngTemplateOutlet]=\"tableTpl\" [ngTemplateOutletContext]=\"{ visible: true }\" />\n </div>\n } @else {\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"loading()\">\n <ng-content />\n </div>\n @if (loading()) {\n <sds-icon name=\"loader-circle\" [size]=\"16\" class=\"absolute right-1 top-1 animate-spin text-ink-faint\" />\n }\n <!-- The table twin: every value reachable without hovering, read by screen readers. -->\n <div class=\"sr-only\">\n <ng-container [ngTemplateOutlet]=\"tableTpl\" [ngTemplateOutletContext]=\"{ visible: false }\" />\n </div>\n }\n </div>\n @if ((legend() === 'bottom' || legend() === 'right') && items().length) {\n <ng-container [ngTemplateOutlet]=\"legendTpl\" />\n }\n </div>\n </figure>\n\n <ng-template #legendTpl>\n <ul\n class=\"flex flex-wrap gap-x-4 gap-y-1.5\"\n [class.@lg:flex-col]=\"legend() === 'right'\"\n [class.@lg:min-w-44]=\"legend() === 'right'\"\n [attr.aria-label]=\"text().legend\"\n >\n @for (item of items(); track item.key) {\n <li>\n @if (interactive()) {\n <button\n type=\"button\"\n class=\"group inline-flex max-w-full items-center gap-2 rounded px-1 py-0.5 text-left text-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n [class.text-ink-soft]=\"!isHidden(item.key)\"\n [class.hover:text-ink]=\"!isHidden(item.key)\"\n [class.text-ink-faint]=\"isHidden(item.key)\"\n [attr.aria-pressed]=\"!isHidden(item.key)\"\n (click)=\"onToggle(item.key)\"\n (mouseenter)=\"onFocus(item.key)\"\n (mouseleave)=\"focusKey.emit(null)\"\n (focus)=\"onFocus(item.key)\"\n (blur)=\"focusKey.emit(null)\"\n >\n <ng-container [ngTemplateOutlet]=\"swatch\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n <span class=\"truncate\" [class.line-through]=\"isHidden(item.key)\">{{ item.label }}</span>\n @if (item.detail) {\n <span class=\"ml-auto pl-2 font-semibold tabular-nums text-ink\">{{ item.detail }}</span>\n }\n </button>\n } @else {\n <span class=\"inline-flex max-w-full items-center gap-2 px-1 py-0.5 text-xs text-ink-soft\">\n <ng-container [ngTemplateOutlet]=\"swatch\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n <span class=\"truncate\">{{ item.label }}</span>\n @if (item.detail) {\n <span class=\"ml-auto pl-2 font-semibold tabular-nums text-ink\">{{ item.detail }}</span>\n }\n </span>\n }\n </li>\n }\n </ul>\n </ng-template>\n\n <ng-template #swatch let-item>\n @switch (item.shape) {\n @case ('line') {\n <span\n class=\"h-0 w-3.5 shrink-0 border-t-2\"\n [class.border-dashed]=\"item.dashed\"\n [style.border-color]=\"isHidden(item.key) ? 'var(--color-ink-faint)' : item.color\"\n [style.opacity]=\"isHidden(item.key) ? 0.5 : 1\"\n ></span>\n }\n @case ('dot') {\n <span\n class=\"size-2.5 shrink-0 rounded-full\"\n [style.background]=\"isHidden(item.key) ? 'transparent' : item.color\"\n [style.box-shadow]=\"isHidden(item.key) ? 'inset 0 0 0 1.5px var(--color-ink-faint)' : null\"\n ></span>\n }\n @default {\n <span\n class=\"size-2.5 shrink-0 rounded-[3px]\"\n [style.background]=\"isHidden(item.key) ? 'transparent' : item.color\"\n [style.box-shadow]=\"isHidden(item.key) ? 'inset 0 0 0 1.5px var(--color-ink-faint)' : null\"\n ></span>\n }\n }\n </ng-template>\n\n <ng-template #tableTpl let-visible=\"visible\">\n <table class=\"w-full border-collapse text-left text-xs\">\n @if (tableCaption()) {\n <caption class=\"sr-only\">{{ tableCaption() }}</caption>\n }\n <thead [class.sticky]=\"visible\" [class.top-0]=\"visible\" [class.bg-muted]=\"visible\">\n <tr>\n @for (col of table().columns; track $index) {\n <th scope=\"col\" class=\"whitespace-nowrap px-3 py-2 font-semibold text-ink-soft\" [class.text-right]=\"$index > 0\">{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of table().rows; track $index) {\n <tr class=\"border-t border-border\">\n @for (cell of row; track $index) {\n @if ($index === 0) {\n <th scope=\"row\" class=\"whitespace-nowrap px-3 py-1.5 font-medium text-ink\">{{ cell }}</th>\n } @else {\n <td class=\"whitespace-nowrap px-3 py-1.5 text-right tabular-nums text-ink-soft\">{{ cell }}</td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </ng-template>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n})\nexport class SdsChartFrame {\n readonly heading = input<string>('');\n readonly subtitle = input<string>('');\n readonly items = input<readonly LegendItem[]>([]);\n readonly legend = input<FrameLegend>('top');\n readonly hidden = input<readonly string[]>([]);\n readonly interactive = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n readonly empty = input(false, { transform: booleanAttribute });\n /** Empty-state text; '' falls back to the configured labels. */\n readonly emptyText = input<string | null>(null);\n readonly height = input<number>(300);\n readonly table = input<ChartTable>({ columns: [], rows: [] });\n readonly tableCaption = input<string>('');\n readonly tableToggle = input(false, { transform: booleanAttribute });\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n protected readonly text = chartLabels();\n\n readonly toggle = output<string>();\n readonly focusKey = output<string | null>();\n\n protected readonly showTable = signal(false);\n private readonly hiddenSet = computed(() => new Set(this.hidden()));\n protected isHidden(key: string): boolean {\n return this.hiddenSet().has(key);\n }\n\n /** Hovering a hidden item must not fade everything that IS shown. */\n protected onFocus(key: string): void {\n this.focusKey.emit(this.isHidden(key) ? null : key);\n }\n\n protected onToggle(key: string): void {\n this.focusKey.emit(null);\n this.toggle.emit(key);\n }\n}\n\n/** The floating tooltip: default rows, or the consumer's `sdsChartTooltip` template. */\n@Component({\n selector: 'sds-chart-tooltip-box',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: { class: 'contents' },\n template: `\n @if (ctx(); as c) {\n <div\n #box\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute z-20 min-w-36 max-w-72 rounded-control border border-border bg-surface/95 px-3 py-2 text-xs shadow-lg backdrop-blur-sm\"\n [style.left.px]=\"pos().left\"\n [style.top.px]=\"pos().top\"\n >\n @if (template(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: c }\" />\n } @else {\n @if (c.title) {\n <p class=\"mb-1.5 font-medium text-ink-soft\">{{ c.title }}</p>\n }\n <ul class=\"space-y-1\">\n @for (row of c.rows; track row.key) {\n <li class=\"flex items-center gap-2\">\n @switch (row.shape) {\n @case ('line') {\n <span class=\"h-0 w-3 shrink-0 border-t-2\" [style.border-color]=\"row.color\"></span>\n }\n @case ('dot') {\n <span class=\"size-2 shrink-0 rounded-full\" [style.background]=\"row.color\"></span>\n }\n @default {\n <span class=\"size-2 shrink-0 rounded-[2px]\" [style.background]=\"row.color\"></span>\n }\n }\n <span class=\"min-w-0 truncate text-ink-soft\">{{ row.label }}</span>\n <span class=\"ml-auto pl-4 font-semibold tabular-nums text-ink\">{{ row.value }}</span>\n </li>\n }\n </ul>\n @if (c.footer) {\n <p class=\"mt-1.5 border-t border-border pt-1.5 font-medium text-ink-soft\">{{ c.footer }}</p>\n }\n }\n </div>\n }\n `,\n})\nexport class SdsChartTooltipBox {\n readonly ctx = input<SdsChartTooltipContext | null>(null);\n readonly template = input<TemplateRef<unknown> | null>(null);\n /** Anchor point in the container's coordinates. */\n readonly x = input(0);\n readonly y = input(0);\n readonly containerWidth = input(0);\n readonly containerHeight = input(0);\n\n private readonly box = viewChild<ElementRef<HTMLElement>>('box');\n private readonly size = signal({ w: 160, h: 64 }, { equal: (a, b) => a.w === b.w && a.h === b.h });\n\n constructor() {\n afterRenderEffect(() => {\n this.ctx();\n const el = this.box()?.nativeElement;\n if (el) this.size.set({ w: el.offsetWidth, h: el.offsetHeight });\n });\n }\n\n /** Right of the anchor, flipped to its left near the edge, then clamped inside the container. */\n protected readonly pos = computed(() => {\n const { w, h } = this.size();\n const cw = this.containerWidth();\n const ch = this.containerHeight();\n const gap = 14;\n let left = this.x() + gap;\n if (left + w > cw) left = this.x() - gap - w;\n left = Math.max(0, Math.min(left, Math.max(0, cw - w)));\n let top = this.y() - h / 2;\n top = Math.max(0, Math.min(top, Math.max(0, ch - h)));\n return { left, top };\n });\n}\n\n/** Gridlines, baseline, tick labels and axis titles — recessive hairlines, never dashed. */\n@Component({\n selector: 'g[sdsChartAxes]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @let p = plot();\n @if (grid() === 'y' || grid() === 'both') {\n @for (t of yTicks(); track t.label + t.pos) {\n <svg:line [attr.x1]=\"p.left\" [attr.x2]=\"p.left + p.width\" [attr.y1]=\"t.pos\" [attr.y2]=\"t.pos\" stroke=\"var(--sds-chart-grid, #eef0f4)\" stroke-width=\"1\" shape-rendering=\"crispEdges\" />\n }\n }\n @if (grid() === 'x' || grid() === 'both') {\n @for (t of xTicks(); track t.label + t.pos) {\n <svg:line [attr.x1]=\"t.pos\" [attr.x2]=\"t.pos\" [attr.y1]=\"p.top\" [attr.y2]=\"p.top + p.height\" stroke=\"var(--sds-chart-grid, #eef0f4)\" stroke-width=\"1\" shape-rendering=\"crispEdges\" />\n }\n }\n @if (baselineY() !== null) {\n <svg:line [attr.x1]=\"p.left\" [attr.x2]=\"p.left + p.width\" [attr.y1]=\"baselineY()\" [attr.y2]=\"baselineY()\" stroke=\"var(--sds-chart-axis, #d3d8e2)\" stroke-width=\"1\" shape-rendering=\"crispEdges\" />\n }\n @if (baselineX() !== null) {\n <svg:line [attr.x1]=\"baselineX()\" [attr.x2]=\"baselineX()\" [attr.y1]=\"p.top\" [attr.y2]=\"p.top + p.height\" stroke=\"var(--sds-chart-axis, #d3d8e2)\" stroke-width=\"1\" shape-rendering=\"crispEdges\" />\n }\n <svg:g class=\"fill-ink-faint\" style=\"font-size: 11px; font-variant-numeric: tabular-nums\">\n @for (t of yTicks(); track t.label + t.pos) {\n <svg:text [attr.x]=\"p.left - 8\" [attr.y]=\"t.pos\" text-anchor=\"end\" dominant-baseline=\"central\">{{ t.label }}</svg:text>\n }\n @for (t of xLabels(); track t.label + t.pos) {\n <svg:text [attr.x]=\"t.pos\" [attr.y]=\"p.top + p.height + 16\" [attr.text-anchor]=\"t.anchor\">{{ t.label }}</svg:text>\n }\n @if (yTitle()) {\n <svg:text\n class=\"fill-ink-soft\"\n [attr.transform]=\"'translate(11,' + (p.top + p.height / 2) + ') rotate(-90)'\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n style=\"font-weight: 500\"\n >{{ yTitle() }}</svg:text>\n }\n @if (xTitle()) {\n <svg:text class=\"fill-ink-soft\" [attr.x]=\"p.left + p.width / 2\" [attr.y]=\"p.top + p.height + 36\" text-anchor=\"middle\" style=\"font-weight: 500\">{{ xTitle() }}</svg:text>\n }\n </svg:g>\n `,\n})\nexport class SdsChartAxes {\n readonly plot = input.required<PlotRect>();\n readonly xTicks = input<readonly AxisTick[]>([]);\n readonly yTicks = input<readonly AxisTick[]>([]);\n readonly grid = input<'x' | 'y' | 'both' | 'none'>('y');\n readonly baselineY = input<number | null>(null);\n readonly baselineX = input<number | null>(null);\n readonly xTitle = input<string>('');\n readonly yTitle = input<string>('');\n /** Full SVG width — x labels near either edge re-anchor so they are never clipped. */\n readonly width = input(0);\n\n protected readonly xLabels = computed(() => {\n const w = this.width();\n return this.xTicks().map((t) => {\n const half = textWidth(t.label) / 2;\n const anchor: 'start' | 'middle' | 'end' = t.pos - half < 0 ? 'start' : w && t.pos + half > w ? 'end' : 'middle';\n const pos = anchor === 'start' ? Math.max(0, t.pos - 4) : anchor === 'end' ? Math.min(w, t.pos + 4) : t.pos;\n return { ...t, pos, anchor };\n });\n });\n}\n\n/** Reference bands (under the marks) or reference lines (over them). */\n@Component({\n selector: 'g[sdsChartAnnotations]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (a of items(); track $index) {\n @if (a.kind === layer()) {\n @if (a.kind === 'band') {\n <svg:rect [attr.x]=\"a.x1\" [attr.y]=\"a.y1\" [attr.width]=\"a.x2 - a.x1\" [attr.height]=\"a.y2 - a.y1\" [attr.fill]=\"a.color\" fill-opacity=\"0.09\" />\n } @else {\n <svg:line [attr.x1]=\"a.x1\" [attr.x2]=\"a.x2\" [attr.y1]=\"a.y1\" [attr.y2]=\"a.y2\" [attr.stroke]=\"a.color\" stroke-width=\"1.5\" stroke-dasharray=\"4 4\" />\n }\n @if (a.label) {\n <svg:text\n class=\"fill-ink-soft\"\n [attr.x]=\"a.labelX\"\n [attr.y]=\"a.labelY\"\n [attr.text-anchor]=\"a.anchor\"\n style=\"font-size: 10.5px; font-weight: 500; paint-order: stroke; stroke: var(--color-surface); stroke-width: 3px; stroke-linejoin: round\"\n >{{ a.label }}</svg:text>\n }\n }\n }\n `,\n})\nexport class SdsChartAnnotations {\n readonly items = input<readonly ResolvedAnnotation[]>([]);\n readonly layer = input<'band' | 'line'>('line');\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { scaleLinear, scaleLog, scalePoint, scaleTime } from 'd3-scale';\nimport {\n area as d3area,\n curveLinear,\n curveMonotoneX,\n curveNatural,\n curveStepAfter,\n line as d3line,\n stack as d3stack,\n stackOffsetExpand,\n CurveFactory,\n} from 'd3-shape';\nimport {\n SdsAccessor,\n SdsChartAnnotation,\n SdsChartGrid,\n SdsChartLegend,\n SdsChartPointEvent,\n SdsChartScale,\n SdsChartSeries,\n SdsChartStack,\n SdsChartTooltipContext,\n SdsChartXType,\n SdsNumberFormat,\n SdsXFormat,\n SdsXValue,\n} from './chart-types';\nimport {\n access,\n annotationValues,\n AxisTick,\n axisFormatter,\n chartAnimates,\n chartLabels,\n chartLocale,\n chartPalette,\n chartUid,\n createTween,\n fitText,\n Geometry,\n hostWidth,\n inferXKind,\n num,\n PERCENT_AXIS,\n PERCENT_VALUE,\n PlotRect,\n resolveAnnotations,\n slotColor,\n textWidth,\n tickCount,\n timeGranularity,\n timeTickFormatter,\n toX,\n stackOffsetSigned,\n uniqueLabels,\n valueFormatter,\n xFormatter,\n XKind,\n xKey,\n} from './chart-core';\nimport { ChartTable, LegendItem, thinOrTruncate, SdsChartAnnotations, SdsChartAxes, SdsChartFrame, SdsChartTooltipBox } from './chart-parts';\nimport { SdsChartTooltip } from './sds-chart-tooltip';\n\n/** Line interpolation. `monotone` (default) is smooth but never overshoots the data. */\nexport type SdsLineCurve = 'linear' | 'monotone' | 'step' | 'natural';\n/** Point markers: `auto` = every point on sparse plain lines (≤ 16), only the last on dense lines and plain areas, none on stacks. */\nexport type SdsLineMarkers = 'auto' | 'all' | 'last' | 'none';\n\nconst CURVES: Record<SdsLineCurve, CurveFactory> = {\n linear: curveLinear,\n monotone: curveMonotoneX,\n step: curveStepAfter,\n natural: curveNatural,\n};\n\ninterface Point<T> {\n row: T;\n index: number;\n x: SdsXValue;\n key: string;\n}\n\ninterface SeriesInfo<T> {\n def: SdsChartSeries<T>;\n key: string;\n label: string;\n color: string;\n fmt: (v: number) => string;\n}\n\n/** [x, y, y0] in pixels; undefined where the value is missing (the line breaks there). */\ntype P3 = readonly number[];\n\n/**\n * Line and area chart for anything over an ordered axis — time series, numeric x, or categories.\n * Multi-series, stacked or 100 % areas, smooth / step curves, log scale, reference lines and bands,\n * dashed forecast series, a crosshair tooltip listing every series, legend toggling, keyboard\n * navigation and a data-table twin. Rows are read with accessors, so API data plots as-is.\n *\n * @example\n * <sds-line-chart\n * heading=\"Admissions\"\n * [data]=\"rows\"\n * x=\"date\"\n * [series]=\"[{ key: 'urgences', label: 'Urgences' }, { key: 'programmees', label: 'Programmées' }]\"\n * />\n */\n@Component({\n selector: 'sds-line-chart',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsChartFrame, SdsChartAxes, SdsChartAnnotations, SdsChartTooltipBox],\n host: { class: 'block' },\n template: `\n <sds-chart-frame\n [heading]=\"heading()\"\n [subtitle]=\"subtitle()\"\n [items]=\"legendItems()\"\n [legend]=\"legendPosition()\"\n [hidden]=\"hidden()\"\n [loading]=\"loading()\"\n [empty]=\"isEmpty()\"\n [emptyText]=\"emptyText()\"\n [height]=\"height()\"\n [table]=\"table()\"\n [tableCaption]=\"label()\"\n [tableToggle]=\"tableToggle()\"\n (toggle)=\"toggleSeries($event)\"\n (focusKey)=\"legendFocus.set($event)\"\n >\n <div\n class=\"relative rounded-control outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n [style.height.px]=\"height()\"\n tabindex=\"0\"\n role=\"group\"\n [attr.aria-roledescription]=\"text().chartRole\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onKey($event)\"\n (blur)=\"onBlur()\"\n >\n @if (layout(); as L) {\n <svg\n class=\"block overflow-visible\"\n style=\"width: 100%; height: 100%\"\n [attr.viewBox]=\"'0 0 ' + L.width + ' ' + L.height\"\n aria-hidden=\"true\"\n >\n <defs>\n @for (s of drawn(); track s.key) {\n <linearGradient [attr.id]=\"uid + '-' + $index\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"0%\" [style.stop-color]=\"s.color\" stop-opacity=\"0.22\" />\n <stop offset=\"100%\" [style.stop-color]=\"s.color\" stop-opacity=\"0.02\" />\n </linearGradient>\n }\n <clipPath [attr.id]=\"uid + '-clip'\">\n <rect [attr.x]=\"L.plot.left - 6\" [attr.y]=\"L.plot.top - 6\" [attr.width]=\"L.plot.width + 12\" [attr.height]=\"L.plot.height + 12\" />\n </clipPath>\n </defs>\n\n <g sdsChartAnnotations [items]=\"annotationsPx()\" layer=\"band\" />\n <g\n sdsChartAxes\n [plot]=\"L.plot\"\n [width]=\"L.width\"\n [xTicks]=\"L.xTicks\"\n [yTicks]=\"L.yTicks\"\n [grid]=\"grid()\"\n [baselineY]=\"L.baseline\"\n [xTitle]=\"xLabel()\"\n [yTitle]=\"yLabel()\"\n />\n\n <g [attr.clip-path]=\"'url(#' + uid + '-clip)'\">\n @for (s of drawn(); track s.key) {\n <g class=\"transition-opacity duration-200\" [style.opacity]=\"s.dim ? 0.18 : 1\">\n @if (s.area) {\n <path\n [attr.d]=\"s.area\"\n [style.fill]=\"stacked() ? s.color : 'url(#' + uid + '-' + $index + ')'\"\n [attr.fill-opacity]=\"stacked() ? 0.28 : 1\"\n />\n }\n <path\n [attr.d]=\"s.line\"\n fill=\"none\"\n [style.stroke]=\"s.color\"\n stroke-width=\"2\"\n stroke-linejoin=\"round\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"s.dashed ? '5 4' : null\"\n />\n @for (m of s.markers; track $index) {\n <circle [attr.cx]=\"m[0]\" [attr.cy]=\"m[1]\" r=\"4\" [style.fill]=\"s.color\" stroke=\"var(--color-surface)\" stroke-width=\"2\" />\n }\n </g>\n }\n </g>\n\n <g sdsChartAnnotations [items]=\"annotationsPx()\" layer=\"line\" />\n\n @if (activePx(); as A) {\n <line\n [attr.x1]=\"A.x\"\n [attr.x2]=\"A.x\"\n [attr.y1]=\"L.plot.top\"\n [attr.y2]=\"L.plot.top + L.plot.height\"\n stroke=\"var(--color-ink-faint)\"\n stroke-width=\"1\"\n shape-rendering=\"crispEdges\"\n />\n @for (d of A.dots; track d.key) {\n <circle [attr.cx]=\"A.x\" [attr.cy]=\"d.y\" r=\"5\" [style.fill]=\"d.color\" stroke=\"var(--color-surface)\" stroke-width=\"2\" />\n }\n }\n\n @for (e of endLabelsPx(); track e.key) {\n <g class=\"transition-opacity duration-200\" [style.opacity]=\"e.dim ? 0.35 : 1\">\n @if (e.leader) {\n <path\n [attr.d]=\"'M' + (e.x + 5) + ',' + e.anchorY + 'L' + (e.x + 9) + ',' + e.anchorY + 'L' + (e.x + 13) + ',' + e.y\"\n fill=\"none\"\n stroke=\"var(--color-ink-faint)\"\n stroke-width=\"1\"\n />\n }\n <text class=\"fill-ink-soft\" [attr.x]=\"e.tx\" [attr.y]=\"e.y\" dominant-baseline=\"central\" style=\"font-size: 11px; font-weight: 500\">{{ e.label }}</text>\n </g>\n }\n\n <rect\n [attr.x]=\"L.plot.left\"\n [attr.y]=\"L.plot.top\"\n [attr.width]=\"L.plot.width\"\n [attr.height]=\"L.plot.height\"\n fill=\"transparent\"\n style=\"cursor: crosshair\"\n (pointermove)=\"onPointer($event)\"\n (pointerdown)=\"onPointer($event)\"\n (pointerleave)=\"active.set(null)\"\n (click)=\"onClick()\"\n />\n </svg>\n\n @if (tooltip()) {\n <sds-chart-tooltip-box\n [ctx]=\"tooltipCtx()\"\n [template]=\"customTooltip()?.template ?? null\"\n [x]=\"activePx()?.x ?? 0\"\n [y]=\"tooltipY()\"\n [containerWidth]=\"L.width\"\n [containerHeight]=\"L.height\"\n />\n }\n }\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">{{ liveText() }}</div>\n </div>\n </sds-chart-frame>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n }\n `,\n})\nexport class SdsLineChart<T = any> {\n // --- Data -------------------------------------------------------------------------------------\n /** The rows to plot — any shape; fields are read through `x` and each series' `key` / `value`. */\n readonly data = input<readonly T[] | null | undefined>([]);\n /** The x field: a property name or `(row, i) => value`. Dates, ISO strings, numbers or labels. */\n readonly x = input.required<SdsAccessor<T, SdsXValue>>();\n /** The measures to draw. A series keeps its colour slot (its index here) even when hidden. */\n readonly series = input.required<readonly SdsChartSeries<T>[]>();\n /** Force the x-axis kind instead of inferring it from the data. */\n readonly xType = input<SdsChartXType>('auto');\n\n // --- Look -------------------------------------------------------------------------------------\n readonly heading = input<string>('');\n readonly subtitle = input<string>('');\n /** Plot height in px, axis labels included (the chart never scrolls inside itself). */\n readonly height = input(300, { transform: numberAttribute });\n readonly curve = input<SdsLineCurve>('monotone');\n /** Fill under each line with a soft wash of its colour. */\n readonly area = input(false, { transform: booleanAttribute });\n /** Stack the series as areas (`stacked`) or as shares of 100 % (`percent`). */\n readonly stack = input<SdsChartStack>('none');\n readonly markers = input<SdsLineMarkers>('auto');\n /** Label each line at its last point; converging labels spread apart with leader lines (dropped if they cannot fit). */\n readonly endLabels = input(false, { transform: booleanAttribute });\n readonly grid = input<SdsChartGrid>('y');\n readonly legend = input<SdsChartLegend>('auto');\n /** Emphasise one series: the others fade back. */\n readonly highlight = input<string | null>(null);\n readonly annotations = input<readonly SdsChartAnnotation[]>([]);\n\n // --- Scales & formats -------------------------------------------------------------------------\n readonly yScale = input<SdsChartScale>('linear');\n readonly yMin = input<number | null>(null);\n readonly yMax = input<number | null>(null);\n /** Start the value axis at zero. Defaults to true for areas/stacks, false for plain lines. */\n readonly includeZero = input<boolean | null>(null);\n /** Format of values in the tooltip, labels and table. Axis ticks derive a compact version. */\n readonly valueFormat = input<SdsNumberFormat | null>(null);\n /** Override the value-axis tick format. */\n readonly axisFormat = input<SdsNumberFormat | null>(null);\n /** Format of x values (ticks + tooltip heading). Time axes pick a sensible multi-scale default. */\n readonly xFormat = input<SdsXFormat | null>(null);\n readonly xLabel = input<string>('');\n readonly yLabel = input<string>('');\n /** BCP-47 locale for numbers and dates. Defaults to provideSdsCharts() / LOCALE_ID. */\n readonly locale = input<string | null>(null);\n\n // --- Behaviour --------------------------------------------------------------------------------\n readonly tooltip = input(true, { transform: booleanAttribute });\n readonly animate = input(true, { transform: booleanAttribute });\n /** Hold the current render at reduced opacity while new data loads (no skeleton flash). */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Empty-state text. Default (`null`): the configured `labels.empty` (\"No data to display\"). */\n readonly emptyText = input<string | null>(null);\n /** Show a button that swaps the plot for its data table. */\n readonly tableToggle = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n /** Keys of the series currently hidden (legend toggles write it back — two-way bindable). */\n readonly hidden = model<readonly string[]>([]);\n\n /** A point was clicked (the series nearest the pointer) or activated with Enter. */\n readonly pointClick = output<SdsChartPointEvent<T>>();\n\n protected readonly customTooltip = contentChild(SdsChartTooltip);\n protected readonly uid = chartUid('sds-line');\n protected readonly legendFocus = signal<string | null>(null);\n protected readonly active = signal<number | null>(null);\n protected readonly keyboard = signal(false);\n\n /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */\n protected onBlur(): void {\n if (this.keyboard()) this.active.set(null);\n this.keyboard.set(false);\n }\n private readonly pointerY = signal(0);\n\n private readonly width = hostWidth();\n private readonly loc = chartLocale(() => this.locale());\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n protected readonly text = chartLabels();\n private readonly animates = chartAnimates(() => this.animate());\n private readonly palette = chartPalette();\n\n protected readonly stacked = computed(() => this.stack() !== 'none');\n\n // --- Model ------------------------------------------------------------------------------------\n\n private readonly model = computed(() => {\n const data = this.data() ?? [];\n const acc = this.x();\n let pts: Point<T>[] = [];\n data.forEach((row, index) => {\n const x = toX(access(acc, row, index));\n if (x !== null) pts.push({ row, index, x, key: '' });\n });\n const kind: XKind = inferXKind(\n pts.map((p) => p.x),\n this.xType(),\n );\n if (kind === 'time') {\n // Epoch-millisecond numbers are valid on a forced time axis.\n pts = pts.map((p) => (typeof p.x === 'number' && Number.isFinite(p.x) ? { ...p, x: new Date(p.x) } : p));\n pts = pts.filter((p) => p.x instanceof Date).sort((a, b) => (a.x as Date).getTime() - (b.x as Date).getTime());\n } else if (kind === 'linear') {\n pts = pts.map((p) => ({ ...p, x: typeof p.x === 'number' ? p.x : Number(p.x) })).filter((p) => Number.isFinite(p.x as number));\n pts.sort((a, b) => (a.x as number) - (b.x as number));\n }\n const seen = new Map<string, number>();\n for (const p of pts) {\n const base = xKey(p.x);\n const n = seen.get(base) ?? 0;\n seen.set(base, n + 1);\n p.key = n ? `${base}#${n}` : base;\n }\n const granularity = kind === 'time' ? timeGranularity(pts.map((p) => (p.x as Date).getTime())) : 0;\n return { pts, kind, granularity };\n });\n\n private readonly allSeries = computed<SeriesInfo<T>[]>(() => {\n const loc = this.loc();\n return this.series().map((def, i) => ({\n def,\n key: def.key,\n label: def.label ?? def.key,\n color: def.color ?? slotColor(i, this.palette),\n fmt: valueFormatter(loc, def.format ?? this.valueFormat()),\n }));\n });\n\n private readonly visible = computed(() => {\n const hidden = new Set(this.hidden());\n return this.allSeries().filter((s) => !hidden.has(s.key));\n });\n\n /** Raw values per series, aligned with the sorted points (null = missing → a gap). */\n private readonly values = computed(() => {\n const { pts } = this.model();\n const log = this.yScale() === 'log' && !this.stacked();\n const out = new Map<string, (number | null)[]>();\n for (const s of this.allSeries()) {\n out.set(\n s.key,\n pts.map((p) => {\n const v = num(s.def.value ? s.def.value(p.row, p.index) : (p.row as Record<string, unknown>)[s.key]);\n return log && v !== null && v <= 0 ? null : v;\n }),\n );\n }\n return out;\n });\n\n /** [y0, y1] per series and point — stacked offsets, or a baseline of 0 for plain lines. */\n private readonly bands = computed(() => {\n const { pts } = this.model();\n const values = this.values();\n const vis = this.visible();\n const out = new Map<string, ([number, number] | null)[]>();\n if (this.stacked() && vis.length) {\n const rows = pts.map((_, i) => {\n const r: Record<string, number> = {};\n for (const s of vis) r[s.key] = values.get(s.key)?.[i] ?? 0;\n return r;\n });\n const layers = d3stack<Record<string, number>>()\n .keys(vis.map((s) => s.key))\n .offset(this.stack() === 'percent' ? stackOffsetExpand : (stackOffsetSigned as never))(rows);\n layers.forEach((layer, li) => {\n const raw = values.get(vis[li].key) ?? [];\n out.set(\n vis[li].key,\n // A missing value is a gap (not a 0 that drags the line to the baseline).\n layer.map((d, i) => (raw[i] !== null && Number.isFinite(d[0]) && Number.isFinite(d[1]) ? [d[0], d[1]] : null)),\n );\n });\n } else {\n for (const s of vis) {\n out.set(\n s.key,\n (values.get(s.key) ?? []).map((v) => (v === null ? null : [0, v])),\n );\n }\n }\n return out;\n });\n\n protected readonly isEmpty = computed(() => {\n if (!this.model().pts.length || !this.series().length) return true;\n for (const arr of this.bands().values()) if (arr.some((b) => b !== null)) return false;\n return true;\n });\n\n // --- Layout -----------------------------------------------------------------------------------\n\n /** Axis formatter at a given precision (uniqueLabels raises it until ticks stop repeating). */\n private readonly axisMaker = computed(() => {\n const loc = this.loc();\n const af = this.axisFormat();\n const vf = this.valueFormat();\n const percent = this.stack() === 'percent';\n return (d: number) => (percent ? valueFormatter(loc, { ...PERCENT_AXIS, maximumFractionDigits: d - 1 }) : axisFormatter(loc, af, vf, d));\n });\n\n private readonly fmtX = computed(() => xFormatter(this.model().kind, this.loc(), this.xFormat(), this.model().granularity));\n\n protected readonly layout = computed(() => {\n const W = this.width();\n const H = this.height();\n if (W <= 0 || this.isEmpty()) return null;\n const { pts, kind } = this.model();\n const bands = this.bands();\n const area = this.area() || this.stacked();\n const percent = this.stack() === 'percent';\n const log = this.yScale() === 'log' && !this.stacked();\n\n // Value domain.\n let lo = Infinity;\n let hi = -Infinity;\n for (const arr of bands.values()) {\n for (const b of arr) {\n if (!b) continue;\n const a = this.stacked() ? b[0] : b[1];\n lo = Math.min(lo, a, b[1]);\n hi = Math.max(hi, a, b[1]);\n }\n }\n for (const v of annotationValues(this.annotations(), 'y')) {\n lo = Math.min(lo, v);\n hi = Math.max(hi, v);\n }\n if (!Number.isFinite(lo)) {\n lo = 0;\n hi = 1;\n }\n const zero = this.includeZero() ?? area;\n if (percent) {\n lo = 0;\n hi = 1;\n } else if (zero && !log) {\n lo = Math.min(0, lo);\n hi = Math.max(0, hi);\n }\n if (this.yMin() !== null) lo = this.yMin()!;\n if (this.yMax() !== null) hi = this.yMax()!;\n if (lo === hi) {\n const pad = Math.abs(lo) * 0.1 || 1;\n lo -= log ? 0 : pad;\n hi += pad;\n }\n if (log && lo <= 0) {\n // Only clamp a non-positive floor (from includeZero / yMin / an annotation) — real values below 1 stay visible.\n let minPos = Infinity;\n for (const arr of bands.values()) for (const b of arr) if (b && b[1] > 0) minPos = Math.min(minPos, b[1]);\n lo = Number.isFinite(minPos) ? minPos : hi > 1 ? 1 : hi / 1000 || 1e-6;\n }\n\n // Margins (measured from the real tick labels).\n const top = this.annotations().some((a) => a.label && a.type === 'line' && a.axis === 'x') ? 22 : 14;\n const bottom = 26 + (this.xLabel() ? 18 : 0);\n const plotHGuess = Math.max(40, H - top - bottom);\n const y = (log ? scaleLog() : scaleLinear()).domain([lo, hi]).range([top + plotHGuess, top]);\n if (!percent && this.yMin() === null && this.yMax() === null) y.nice(tickCount(plotHGuess, 52));\n let yTickVals = y.ticks(tickCount(plotHGuess, 52));\n if (log && yTickVals.length > 8) {\n const decades = yTickVals.filter((t) => Math.abs(Math.log10(t) % 1) < 1e-9);\n if (decades.length >= 2) yTickVals = decades;\n }\n const yLabels = uniqueLabels(yTickVals, this.axisMaker());\n const left = Math.ceil(Math.max(0, ...yLabels.map((l) => textWidth(l)))) + 12 + (this.yLabel() ? 18 : 0);\n\n let right = 14;\n const endLabels = this.endLabels() ? this.visible().map((s) => fitText(s.label, 120)) : [];\n if (endLabels.length) right = Math.ceil(Math.max(...endLabels.map((l) => textWidth(l, 11, 500)))) + 24;\n\n const plot: PlotRect = { left, top, width: Math.max(10, W - left - right), height: plotHGuess };\n if (plot.width < 40) return null;\n\n // X scale + ticks.\n const xr: [number, number] = [plot.left, plot.left + plot.width];\n let xPos: (p: Point<T>) => number;\n let xTicks: AxisTick[] = [];\n let mapX: (v: SdsXValue) => number | null;\n const fx = this.fmtX();\n if (kind === 'time') {\n const times = pts.map((p) => (p.x as Date).getTime());\n let d0 = Math.min(...times);\n let d1 = Math.max(...times);\n if (d0 === d1) {\n d0 -= 864e5;\n d1 += 864e5;\n }\n const sx = scaleTime().domain([new Date(d0), new Date(d1)]).range(xr);\n xPos = (p) => sx(p.x as Date);\n mapX = (v) => {\n const d = toX(v);\n return d instanceof Date ? sx(d) : null;\n };\n xTicks = this.timeTicks(sx.ticks(tickCount(plot.width, 96)), sx, plot.width);\n } else if (kind === 'linear') {\n const xs = pts.map((p) => p.x as number);\n let d0 = Math.min(...xs);\n let d1 = Math.max(...xs);\n if (d0 === d1) {\n d0 -= 1;\n d1 += 1;\n }\n const sx = scaleLinear().domain([d0, d1]).range(xr);\n xPos = (p) => sx(p.x as number);\n mapX = (v) => (typeof v === 'number' ? sx(v) : null);\n const fmt = this.xFormat() ? fx : axisFormatter(this.loc(), null, null);\n xTicks = sx.ticks(tickCount(plot.width, 90)).map((t) => ({ pos: sx(t), label: fmt(t as never) }));\n } else {\n const sx = scalePoint<string>().domain(pts.map((p) => p.key)).range(xr).padding(0.3);\n xPos = (p) => sx(p.key) ?? 0;\n mapX = (v) => sx(xKey(toX(v))) ?? null;\n xTicks = thinOrTruncate(\n pts.map((p) => ({ pos: sx(p.key) ?? 0, label: fx(p.x) })),\n sx.step(),\n );\n }\n\n const yTicks: AxisTick[] = yTickVals.map((v, i) => ({ pos: y(v), label: yLabels[i] }));\n const domain = y.domain();\n const baseValue = log ? domain[0] : Math.max(domain[0], Math.min(domain[1], 0));\n const baseline = zero || this.stacked() ? y(baseValue) : null;\n return {\n width: W,\n height: H,\n plot,\n y,\n xPos,\n mapX,\n xTicks,\n yTicks,\n baseline: baseline ?? plot.top + plot.height,\n baseY: y(baseValue),\n };\n });\n\n private timeTicks(ticks: Date[], sx: (d: Date) => number, plotWidth: number): AxisTick[] {\n const make = (list: Date[]) => {\n const f = timeTickFormatter(this.loc(), list, this.xFormat());\n return list.map((d, i) => ({ pos: sx(d), label: f(d, i) }));\n };\n let out = make(ticks);\n // Thin until labels breathe — every other tick, then every third…\n for (let step = 2; step < 12; step++) {\n const widest = Math.max(0, ...out.map((t) => textWidth(t.label)));\n if ((widest + 16) * out.length <= plotWidth) break;\n out = make(ticks.filter((_, i) => i % step === 0));\n }\n return out;\n }\n\n // --- Geometry (tweened) -----------------------------------------------------------------------\n\n private readonly target = computed<Geometry>(() => {\n const L = this.layout();\n const out = new Map<string, readonly number[]>();\n if (!L) return out;\n const { pts } = this.model();\n for (const [key, arr] of this.bands()) {\n const raw = this.values().get(key) ?? [];\n const stacked = this.stacked();\n arr.forEach((b, i) => {\n if (!b) return;\n // A stacked negative value's data edge is its FAR side (d3 gives [far, near-zero]).\n const neg = stacked && (raw[i] ?? 0) < 0;\n out.set(`${key}|${pts[i].key}`, [L.xPos(pts[i]), L.y(neg ? b[0] : b[1]), L.y(neg ? b[1] : b[0])]);\n });\n }\n return out;\n });\n\n /** Boolean, so a resize (width A → B) never counts as a data change: resizes snap, data animates. */\n private readonly ready = computed(() => this.width() > 0);\n private readonly version = computed(() => {\n this.data();\n this.series();\n this.hidden();\n this.stack();\n this.yScale();\n this.yMin();\n this.yMax();\n return this.ready() ? {} : null;\n });\n\n private readonly geometry = createTween({\n target: () => this.target(),\n version: () => this.version(),\n enabled: () => this.animates(),\n // The entrance rises from the baseline; a point that appears on a later update (a sliding\n // window, an unhidden series) starts in place instead of shooting up through the other lines.\n enter: (_k, to, initial) => {\n if (!initial) return to;\n const base = this.layout()?.baseY ?? to[1];\n return [to[0], base, this.stacked() ? base : to[2]];\n },\n });\n\n protected readonly drawn = computed(() => {\n const L = this.layout();\n if (!L) return [];\n const geo = this.geometry();\n const { pts } = this.model();\n const curve = CURVES[this.curve()] ?? curveMonotoneX;\n const area = this.area() || this.stacked();\n const markers = this.markers();\n const focus = this.legendFocus() ?? this.highlight();\n const lineGen = d3line<P3 | undefined>()\n .defined((d) => !!d)\n .x((d) => d![0])\n .y((d) => d![1])\n .curve(curve);\n const areaGen = d3area<P3 | undefined>()\n .defined((d) => !!d)\n .x((d) => d![0])\n .y0((d) => (this.stacked() ? d![2] : L.baseline))\n .y1((d) => d![1])\n .curve(curve);\n return this.visible().map((s) => {\n const seq = pts.map((p) => geo.get(`${s.key}|${p.key}`));\n const defined = seq.filter((d): d is P3 => !!d);\n // auto: every point on sparse plain lines, the last one otherwise — none on stacked bands,\n // where per-point dots would sit on every layer boundary and read as clutter.\n const auto = markers === 'auto' && !this.stacked();\n const showAll = markers === 'all' || (auto && !area && defined.length <= 16);\n const showLast = markers === 'last' || (auto && !showAll);\n return {\n key: s.key,\n color: s.color,\n dashed: !!s.def.dashed,\n dim: !!focus && focus !== s.key,\n line: lineGen(seq) ?? '',\n area: area ? (areaGen(seq) ?? '') : null,\n markers: showAll ? defined : showLast && defined.length ? [defined[defined.length - 1]] : [],\n };\n });\n });\n\n protected readonly annotationsPx = computed(() => {\n const L = this.layout();\n if (!L) return [];\n return resolveAnnotations(this.annotations(), L.plot, L.mapX, (v) => {\n const n = num(v);\n return n === null ? null : L.y(n);\n });\n });\n\n /**\n * End labels. Where lines converge the labels are spread apart (never stacked on each other) and a\n * hairline leader ties each displaced label back to its line end. If they cannot all fit in the plot\n * height the set is dropped — the legend then carries identity.\n */\n protected readonly endLabelsPx = computed(() => {\n const L = this.layout();\n if (!L || !this.endLabels()) return [];\n const geo = this.target();\n const { pts } = this.model();\n const focus = this.legendFocus() ?? this.highlight();\n const gap = 14;\n const labels = this.visible()\n .map((s) => {\n for (let i = pts.length - 1; i >= 0; i--) {\n const g = geo.get(`${s.key}|${pts[i].key}`);\n if (g) return { key: s.key, label: fitText(s.label, 120, 11, 500), x: g[0], anchorY: g[1], y: g[1], dim: !!focus && focus !== s.key };\n }\n return null;\n })\n .filter((l): l is { key: string; label: string; x: number; anchorY: number; y: number; dim: boolean } => !!l)\n .sort((a, b) => a.anchorY - b.anchorY);\n if (labels.length * gap > L.plot.height + gap) return [];\n // Relax: push overlapping labels apart, then keep the block inside the plot.\n for (let pass = 0; pass < 40; pass++) {\n let moved = false;\n for (let i = 1; i < labels.length; i++) {\n const overlap = gap - (labels[i].y - labels[i - 1].y);\n if (overlap > 0.1) {\n labels[i - 1].y -= overlap / 2;\n labels[i].y += overlap / 2;\n moved = true;\n }\n }\n const top = L.plot.top + 4;\n const bottom = L.plot.top + L.plot.height - 4;\n if (labels.length && labels[0].y < top) {\n const d = top - labels[0].y;\n labels.forEach((l) => (l.y += d));\n }\n if (labels.length && labels[labels.length - 1].y > bottom) {\n const d = labels[labels.length - 1].y - bottom;\n labels.forEach((l) => (l.y -= d));\n }\n if (!moved) break;\n }\n return labels.map((l) => ({ ...l, tx: l.x + 16, leader: Math.abs(l.y - l.anchorY) > 2 }));\n });\n\n // --- Interaction ------------------------------------------------------------------------------\n\n protected readonly activePx = computed(() => {\n const i = this.active();\n const L = this.layout();\n if (i === null || !L) return null;\n const { pts } = this.model();\n const p = pts[i];\n if (!p) return null;\n const geo = this.target();\n const dots = this.visible()\n .map((s) => {\n const g = geo.get(`${s.key}|${p.key}`);\n return g ? { key: s.key, y: g[1], color: s.color } : null;\n })\n .filter((d): d is { key: string; y: number; color: string } => !!d);\n return { x: L.xPos(p), dots };\n });\n\n protected readonly tooltipY = computed(() => {\n if (!this.keyboard()) return this.pointerY();\n const dots = this.activePx()?.dots ?? [];\n return dots.length ? Math.min(...dots.map((d) => d.y)) : 0;\n });\n\n protected readonly tooltipCtx = computed<SdsChartTooltipContext<T> | null>(() => {\n const i = this.active();\n if (i === null) return null;\n const { pts } = this.model();\n const p = pts[i];\n if (!p) return null;\n const values = this.values();\n const percent = this.stack() === 'percent';\n const vis = this.visible();\n const pctFmt = valueFormatter(this.loc(), PERCENT_VALUE);\n let total = 0;\n for (const s of vis) total += values.get(s.key)?.[i] ?? 0;\n const rows = vis.map((s) => {\n const raw = values.get(s.key)?.[i] ?? null;\n let value = raw === null ? '—' : s.fmt(raw);\n if (percent && raw !== null && total) value += ` · ${pctFmt(raw / total)}`;\n return { key: s.key, label: s.label, value, raw, color: s.color, shape: 'line' as const };\n });\n const fmt = this.valueFormat();\n const footer = this.stacked() && vis.length > 1 ? `${this.text().total} · ${valueFormatter(this.loc(), fmt)(total)}` : undefined;\n return { title: this.fmtX()(p.x), rows, footer, data: [p.row], index: p.index };\n });\n\n protected readonly liveText = computed(() => {\n if (!this.keyboard()) return '';\n const c = this.tooltipCtx();\n if (!c) return '';\n return `${c.title} — ${c.rows.map((r) => this.text().labelValue(r.label, r.value)).join(', ')}${c.footer ? `, ${c.footer}` : ''}`;\n });\n\n protected onPointer(event: PointerEvent): void {\n const L = this.layout();\n if (!L) return;\n const svg = (event.currentTarget as SVGElement).ownerSVGElement;\n const rect = svg?.getBoundingClientRect();\n if (!rect || !rect.width) return;\n // The SVG is drawn 1:1 with its viewBox, but scale anyway (SSR viewBox, zoomed layouts).\n const px = ((event.clientX - rect.left) / rect.width) * L.width;\n const py = ((event.clientY - rect.top) / rect.height) * L.height;\n this.keyboard.set(false);\n this.pointerY.set(py);\n this.active.set(this.nearestIndex(px));\n }\n\n private nearestIndex(px: number): number | null {\n const L = this.layout();\n const { pts } = this.model();\n if (!L || !pts.length) return null;\n let lo = 0;\n let hi = pts.length - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (L.xPos(pts[mid]) < px) lo = mid + 1;\n else hi = mid;\n }\n if (lo > 0 && Math.abs(L.xPos(pts[lo - 1]) - px) <= Math.abs(L.xPos(pts[lo]) - px)) lo -= 1;\n return lo;\n }\n\n protected onClick(): void {\n const i = this.active();\n if (i === null) return;\n const dots = this.activePx()?.dots ?? [];\n const y = this.keyboard() ? (dots[0]?.y ?? 0) : this.pointerY();\n const nearest = dots.reduce<{ key: string; d: number } | null>((best, d) => {\n const dist = Math.abs(d.y - y);\n return !best || dist < best.d ? { key: d.key, d: dist } : best;\n }, null);\n if (!nearest) return;\n const p = this.model().pts[i];\n this.pointClick.emit({\n key: nearest.key,\n row: p.row,\n index: p.index,\n value: this.values().get(nearest.key)?.[i] ?? null,\n x: p.x,\n });\n }\n\n protected onKey(event: KeyboardEvent): void {\n const n = this.model().pts.length;\n if (!n) return;\n const a = this.active();\n const cur = a !== null && a < n ? a : null;\n let next: number | null = cur;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = cur === null ? 0 : Math.min(n - 1, cur + 1);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = cur === null ? n - 1 : Math.max(0, cur - 1);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = n - 1;\n break;\n case 'Escape':\n next = null;\n break;\n case 'Enter':\n case ' ':\n if (cur !== null) {\n event.preventDefault();\n this.onClick();\n }\n return;\n default:\n return;\n }\n event.preventDefault();\n this.keyboard.set(true);\n this.active.set(next);\n }\n\n protected toggleSeries(key: string): void {\n const hidden = new Set(this.hidden());\n if (hidden.has(key)) hidden.delete(key);\n else if (this.visible().length > 1) hidden.add(key); // never hide the last one\n this.hidden.set([...hidden]);\n }\n\n // --- Chrome -----------------------------------------------------------------------------------\n\n protected readonly legendPosition = computed(() => {\n const l = this.legend();\n if (l === 'none') return 'none' as const;\n if (l === 'auto') return this.series().length > 1 ? ('top' as const) : ('none' as const);\n return l;\n });\n\n protected readonly legendItems = computed<LegendItem[]>(() =>\n this.allSeries().map((s) => ({\n key: s.key,\n label: s.label,\n color: s.color,\n shape: this.stacked() ? 'rect' : 'line',\n dashed: !!s.def.dashed,\n })),\n );\n\n protected readonly label = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel()!;\n const names = this.allSeries().map((s) => s.label).join(', ');\n return [this.heading() || this.text().lineChart, names].filter(Boolean).join(' — ');\n });\n\n protected readonly table = computed<ChartTable>(() => {\n const { pts } = this.model();\n const vis = this.visible();\n const values = this.values();\n const fx = this.fmtX();\n return {\n columns: [this.xLabel() || (this.model().kind === 'time' ? this.text().date : this.text().category), ...vis.map((s) => s.label)],\n rows: pts.map((p, i) => [\n fx(p.x),\n ...vis.map((s) => {\n const v = values.get(s.key)?.[i] ?? null;\n return v === null ? '—' : s.fmt(v);\n }),\n ]),\n };\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { scaleBand, scaleLinear } from 'd3-scale';\nimport { curveMonotoneX, line as d3line, stack as d3stack, stackOffsetExpand } from 'd3-shape';\nimport {\n SdsAccessor,\n SdsChartAnnotation,\n SdsChartGrid,\n SdsChartLegend,\n SdsChartPointEvent,\n SdsChartSeries,\n SdsChartStack,\n SdsChartTooltipContext,\n SdsNumberFormat,\n SdsXFormat,\n SdsXValue,\n} from './chart-types';\nimport {\n access,\n annotationValues,\n AxisTick,\n axisFormatter,\n barPath,\n chartAnimates,\n chartLabels,\n chartLocale,\n chartPalette,\n createTween,\n fitText,\n Geometry,\n hostWidth,\n num,\n numberOrNull,\n PERCENT_AXIS,\n PERCENT_VALUE,\n PlotRect,\n resolveAnnotations,\n slotColor,\n textWidth,\n tickCount,\n timeGranularity,\n toX,\n stackOffsetSigned,\n uniqueLabels,\n valueFormatter,\n xFormatter,\n xKey,\n} from './chart-core';\nimport { ChartTable, LegendItem, thinOrTruncate, SdsChartAnnotations, SdsChartAxes, SdsChartFrame, SdsChartTooltipBox } from './chart-parts';\nimport { SdsChartTooltip } from './sds-chart-tooltip';\n\n/** `vertical` = columns rising from the category axis; `horizontal` = bars (best for long labels / rankings). */\nexport type SdsBarOrientation = 'vertical' | 'horizontal';\n/** Order the categories by their total. `none` keeps the data order. */\nexport type SdsBarSort = 'none' | 'asc' | 'desc';\n\ninterface Category<T> {\n row: T;\n index: number;\n x: SdsXValue;\n /** Unique key (duplicates get a `#n` suffix). */\n key: string;\n /** The x value's own key — what `highlightCategories` matches against. */\n base: string;\n}\n\ninterface SeriesInfo<T> {\n def: SdsChartSeries<T>;\n key: string;\n label: string;\n color: string;\n line: boolean;\n fmt: (v: number) => string;\n}\n\ninterface BarMeta {\n color: string;\n end: 'top' | 'bottom' | 'left' | 'right';\n series: string;\n category: number;\n rounded: boolean;\n}\n\nconst GAP = 2;\n\n/**\n * Bar and column chart for comparing categories: grouped, stacked or 100 % stacked, vertical or\n * horizontal, with negative values, value labels that are only drawn where they fit, sorting,\n * per-bar colours, a combo `type: 'line'` series on the same axis, reference lines (targets) and a\n * per-category tooltip listing every series. Bars are capped in thickness, rounded on their data end\n * only, and separated by a 2 px surface gap — never outlined.\n *\n * @example\n * <sds-bar-chart\n * heading=\"Séjours par service\"\n * [data]=\"rows\"\n * x=\"mois\"\n * [series]=\"[{ key: 'cardio', label: 'Cardiologie' }, { key: 'neuro', label: 'Neurologie' }]\"\n * stack=\"stacked\"\n * />\n */\n@Component({\n selector: 'sds-bar-chart',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsChartFrame, SdsChartAxes, SdsChartAnnotations, SdsChartTooltipBox],\n host: { class: 'block' },\n template: `\n <sds-chart-frame\n [heading]=\"heading()\"\n [subtitle]=\"subtitle()\"\n [items]=\"legendItems()\"\n [legend]=\"legendPosition()\"\n [hidden]=\"hidden()\"\n [loading]=\"loading()\"\n [empty]=\"isEmpty()\"\n [emptyText]=\"emptyText()\"\n [height]=\"resolvedHeight()\"\n [table]=\"table()\"\n [tableCaption]=\"label()\"\n [tableToggle]=\"tableToggle()\"\n (toggle)=\"toggleSeries($event)\"\n (focusKey)=\"legendFocus.set($event)\"\n >\n <div\n class=\"relative rounded-control outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n [style.height.px]=\"resolvedHeight()\"\n tabindex=\"0\"\n role=\"group\"\n [attr.aria-roledescription]=\"text().chartRole\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onKey($event)\"\n (blur)=\"onBlur()\"\n >\n @if (layout(); as L) {\n <svg class=\"block overflow-visible\" style=\"width: 100%; height: 100%\" [attr.viewBox]=\"'0 0 ' + L.width + ' ' + L.height\" aria-hidden=\"true\">\n @if (hoverBand(); as hb) {\n <rect [attr.x]=\"hb.x\" [attr.y]=\"hb.y\" [attr.width]=\"hb.w\" [attr.height]=\"hb.h\" rx=\"4\" class=\"fill-ink\" fill-opacity=\"0.05\" />\n }\n <g sdsChartAnnotations [items]=\"annotationsPx()\" layer=\"band\" />\n <g\n sdsChartAxes\n [plot]=\"L.plot\"\n [width]=\"L.width\"\n [xTicks]=\"L.xTicks\"\n [yTicks]=\"L.yTicks\"\n [grid]=\"L.grid\"\n [baselineY]=\"L.horizontal ? null : L.base\"\n [baselineX]=\"L.horizontal ? L.base : null\"\n [xTitle]=\"xLabel()\"\n [yTitle]=\"yLabel()\"\n />\n\n @for (b of bars(); track b.id) {\n <path [attr.d]=\"b.d\" [style.fill]=\"b.color\" class=\"transition-opacity duration-200\" [style.opacity]=\"b.dim ? 0.25 : 1\" />\n }\n\n @for (s of lines(); track s.key) {\n <g class=\"transition-opacity duration-200\" [style.opacity]=\"s.dim ? 0.2 : 1\">\n <path [attr.d]=\"s.d\" fill=\"none\" [style.stroke]=\"s.color\" stroke-width=\"2\" stroke-linejoin=\"round\" stroke-linecap=\"round\" [attr.stroke-dasharray]=\"s.dashed ? '5 4' : null\" />\n @for (m of s.points; track $index) {\n <circle [attr.cx]=\"m[0]\" [attr.cy]=\"m[1]\" r=\"4\" [style.fill]=\"s.color\" stroke=\"var(--color-surface)\" stroke-width=\"2\" />\n }\n </g>\n }\n\n <g sdsChartAnnotations [items]=\"annotationsPx()\" layer=\"line\" />\n\n @for (v of valueLabels(); track v.id) {\n <text\n class=\"fill-ink-soft\"\n [attr.x]=\"v.x\"\n [attr.y]=\"v.y\"\n [attr.text-anchor]=\"v.anchor\"\n dominant-baseline=\"central\"\n style=\"font-size: 11px; font-weight: 500; font-variant-numeric: tabular-nums\"\n >{{ v.text }}</text>\n }\n\n @for (h of hits(); track h.index) {\n <rect\n [attr.x]=\"h.x\"\n [attr.y]=\"h.y\"\n [attr.width]=\"h.w\"\n [attr.height]=\"h.h\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n (pointerenter)=\"enter(h.index, $event)\"\n (pointermove)=\"move($event)\"\n (pointerleave)=\"active.set(null)\"\n (click)=\"onClick(h.index, $event)\"\n />\n }\n </svg>\n\n @if (tooltip()) {\n <sds-chart-tooltip-box\n [ctx]=\"tooltipCtx()\"\n [template]=\"customTooltip()?.template ?? null\"\n [x]=\"tooltipAt().x\"\n [y]=\"tooltipAt().y\"\n [containerWidth]=\"L.width\"\n [containerHeight]=\"L.height\"\n />\n }\n }\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">{{ liveText() }}</div>\n </div>\n </sds-chart-frame>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n }\n `,\n})\nexport class SdsBarChart<T = any> {\n // --- Data -------------------------------------------------------------------------------------\n readonly data = input<readonly T[] | null | undefined>([]);\n /** The category field: a property name or `(row, i) => value`. */\n readonly x = input.required<SdsAccessor<T, SdsXValue>>();\n /** The measures. A `type: 'line'` series is drawn as a line over the bars (vertical only). */\n readonly series = input.required<readonly SdsChartSeries<T>[]>();\n\n // --- Look -------------------------------------------------------------------------------------\n readonly heading = input<string>('');\n readonly subtitle = input<string>('');\n readonly orientation = input<SdsBarOrientation>('vertical');\n readonly stack = input<SdsChartStack>('none');\n /** Height in px, axes included. Defaults to 300 (vertical) or one row per category (horizontal). */\n readonly height = input<number | null, unknown>(null, { transform: numberOrNull });\n /** Maximum bar thickness in px — bars never fill their slot; the leftover is air. */\n readonly maxBarSize = input(28, { transform: numberAttribute });\n /** Corner radius of the bar's data end (its baseline end stays square). */\n readonly radius = input(4, { transform: numberAttribute });\n /** Print each bar's value at its tip (each stack's total when stacked) — only where it fits. */\n readonly showValues = input(false, { transform: booleanAttribute });\n readonly sort = input<SdsBarSort>('none');\n /** Emphasise some categories (their x values): the other bars fade back. (Series emphasis: hover the legend.) */\n readonly highlightCategories = input<readonly SdsXValue[] | SdsXValue | null>(null);\n /** Colour one bar from its data — e.g. negatives in red, or a status. Return null to keep the series colour. */\n readonly barColor = input<((row: T, seriesKey: string, value: number) => string | null | undefined) | null>(null);\n readonly grid = input<SdsChartGrid | null>(null);\n readonly legend = input<SdsChartLegend>('auto');\n /** Reference lines / bands. `axis: 'y'` (default) is the VALUE axis in both orientations. */\n readonly annotations = input<readonly SdsChartAnnotation[]>([]);\n\n // --- Scales & formats -------------------------------------------------------------------------\n readonly yMin = input<number | null>(null);\n readonly yMax = input<number | null>(null);\n readonly valueFormat = input<SdsNumberFormat | null>(null);\n readonly axisFormat = input<SdsNumberFormat | null>(null);\n /** Format of the category labels (dates are formatted at their granularity by default). */\n readonly xFormat = input<SdsXFormat | null>(null);\n readonly xLabel = input<string>('');\n readonly yLabel = input<string>('');\n readonly locale = input<string | null>(null);\n\n // --- Behaviour --------------------------------------------------------------------------------\n readonly tooltip = input(true, { transform: booleanAttribute });\n readonly animate = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n /** Empty-state text. Default (`null`): the configured `labels.empty` (\"No data to display\"). */\n readonly emptyText = input<string | null>(null);\n readonly tableToggle = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n readonly hidden = model<readonly string[]>([]);\n\n /** A bar (or a category, from the keyboard) was clicked. */\n readonly pointClick = output<SdsChartPointEvent<T>>();\n\n protected readonly customTooltip = contentChild(SdsChartTooltip);\n protected readonly legendFocus = signal<string | null>(null);\n protected readonly active = signal<number | null>(null);\n protected readonly keyboard = signal(false);\n\n /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */\n protected onBlur(): void {\n if (this.keyboard()) this.active.set(null);\n this.keyboard.set(false);\n }\n private readonly pointer = signal({ x: 0, y: 0 });\n\n private readonly width = hostWidth();\n private readonly loc = chartLocale(() => this.locale());\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n protected readonly text = chartLabels();\n private readonly animates = chartAnimates(() => this.animate());\n private readonly palette = chartPalette();\n\n private readonly horizontal = computed(() => this.orientation() === 'horizontal');\n private readonly stacked = computed(() => this.stack() !== 'none');\n\n // --- Model ------------------------------------------------------------------------------------\n\n private readonly allSeries = computed<SeriesInfo<T>[]>(() => {\n const loc = this.loc();\n return this.series().map((def, i) => ({\n def,\n key: def.key,\n label: def.label ?? def.key,\n color: def.color ?? slotColor(i, this.palette),\n line: def.type === 'line' && !this.horizontal(),\n fmt: valueFormatter(loc, def.format ?? this.valueFormat()),\n }));\n });\n\n private readonly visible = computed(() => {\n const hidden = new Set(this.hidden());\n return this.allSeries().filter((s) => !hidden.has(s.key));\n });\n private readonly barSeries = computed(() => this.visible().filter((s) => !s.line));\n private readonly lineSeries = computed(() => this.visible().filter((s) => s.line));\n\n private readonly raw = computed(() => {\n const data = this.data() ?? [];\n const acc = this.x();\n const cats: Category<T>[] = [];\n data.forEach((row, index) => {\n const x = toX(access(acc, row, index));\n if (x !== null) cats.push({ row, index, x, key: '', base: xKey(x) });\n });\n const seen = new Map<string, number>();\n for (const c of cats) {\n const base = xKey(c.x);\n const n = seen.get(base) ?? 0;\n seen.set(base, n + 1);\n c.key = n ? `${base}#${n}` : base;\n }\n const allDates = cats.length > 0 && cats.every((c) => c.x instanceof Date);\n return { cats, allDates };\n });\n\n private readonly rawValues = computed(() => {\n const { cats } = this.raw();\n const out = new Map<string, (number | null)[]>();\n for (const s of this.allSeries()) {\n out.set(\n s.key,\n cats.map((c) => num(s.def.value ? s.def.value(c.row, c.index) : (c.row as Record<string, unknown>)[s.key])),\n );\n }\n return out;\n });\n\n /** Categories in display order (sorted by total of the visible bar series when asked). */\n private readonly order = computed(() => {\n const { cats } = this.raw();\n const idx = cats.map((_, i) => i);\n const sort = this.sort();\n if (sort !== 'none') {\n const values = this.rawValues();\n const total = (i: number) => this.barSeries().reduce((s, ser) => s + (values.get(ser.key)?.[i] ?? 0), 0);\n idx.sort((a, b) => (sort === 'asc' ? total(a) - total(b) : total(b) - total(a)));\n }\n return idx;\n });\n\n /** [v0, v1] per bar series per category (value space). */\n private readonly extents = computed(() => {\n const { cats } = this.raw();\n const values = this.rawValues();\n const bars = this.barSeries();\n const out = new Map<string, ([number, number] | null)[]>();\n if (this.stacked() && bars.length) {\n const rows = cats.map((_, i) => {\n const r: Record<string, number> = {};\n for (const s of bars) r[s.key] = values.get(s.key)?.[i] ?? 0;\n return r;\n });\n const layers = d3stack<Record<string, number>>()\n .keys(bars.map((s) => s.key))\n .offset(this.stack() === 'percent' ? stackOffsetExpand : (stackOffsetSigned as never))(rows);\n layers.forEach((layer, li) => {\n const key = bars[li].key;\n out.set(\n key,\n layer.map((d, i) => (values.get(key)?.[i] === null || !Number.isFinite(d[0]) || !Number.isFinite(d[1]) ? null : [d[0], d[1]])),\n );\n });\n } else {\n for (const s of bars) out.set(s.key, (values.get(s.key) ?? []).map((v) => (v === null ? null : [0, v])));\n }\n return out;\n });\n\n protected readonly isEmpty = computed(() => {\n if (!this.raw().cats.length || !this.series().length) return true;\n const values = this.rawValues();\n return !this.visible().some((s) => values.get(s.key)?.some((v) => v !== null));\n });\n\n // --- Layout -----------------------------------------------------------------------------------\n\n private readonly axisMaker = computed(() => {\n const loc = this.loc();\n const af = this.axisFormat();\n const vf = this.valueFormat();\n const percent = this.stack() === 'percent';\n return (d: number) => (percent ? valueFormatter(loc, { ...PERCENT_AXIS, maximumFractionDigits: d - 1 }) : axisFormatter(loc, af, vf, d));\n });\n\n private readonly fmtCat = computed(() => {\n const { cats, allDates } = this.raw();\n const gran = allDates ? timeGranularity(cats.map((c) => (c.x as Date).getTime()).sort((a, b) => a - b)) : 0;\n return xFormatter(allDates ? 'time' : 'category', this.loc(), this.xFormat(), gran);\n });\n\n /** Bars-per-group (1 when stacked) — drives row height for auto-sized horizontal charts. */\n private readonly groupCount = computed(() => (this.stacked() ? 1 : Math.max(1, this.barSeries().length)));\n\n protected readonly resolvedHeight = computed(() => {\n const h = this.height();\n if (h !== null && h > 0) return h;\n if (!this.horizontal()) return 300;\n const row = Math.max(30, this.groupCount() * Math.min(this.maxBarSize(), 18) + 14);\n return Math.max(120, this.raw().cats.length * row + 40);\n });\n\n protected readonly layout = computed(() => {\n const W = this.width();\n const H = this.resolvedHeight();\n if (W <= 0 || this.isEmpty()) return null;\n const horizontal = this.horizontal();\n const { cats } = this.raw();\n const order = this.order();\n const extents = this.extents();\n const values = this.rawValues();\n const percent = this.stack() === 'percent';\n\n // Value domain (always includes zero — bars grow from a baseline).\n let lo = 0;\n let hi = 0;\n for (const arr of extents.values()) for (const e of arr) if (e) {\n lo = Math.min(lo, e[0], e[1]);\n hi = Math.max(hi, e[0], e[1]);\n }\n for (const s of this.lineSeries()) for (const v of values.get(s.key) ?? []) if (v !== null) {\n lo = Math.min(lo, v);\n hi = Math.max(hi, v);\n }\n for (const v of annotationValues(this.annotations(), 'y')) {\n lo = Math.min(lo, v);\n hi = Math.max(hi, v);\n }\n if (percent) {\n lo = 0;\n hi = 1;\n }\n if (this.yMin() !== null) lo = this.yMin()!;\n if (this.yMax() !== null) hi = this.yMax()!;\n if (lo === hi) hi = lo + 1;\n\n const maker = this.axisMaker();\n const fa = maker(1);\n const fc = this.fmtCat();\n const catLabels = order.map((i) => fc(cats[i].x));\n const showValues = this.showValues();\n\n // A value-label size estimate for margins.\n const valueLabelW = showValues ? Math.max(0, ...this.labelTexts().map((t) => textWidth(t, 11, 500))) : 0;\n\n let plot: PlotRect;\n const value = scaleLinear().domain([lo, hi]);\n let valueTicks: number[];\n if (!horizontal) {\n const top = 14 + (showValues ? 14 : 0);\n const bottom = 26 + (this.xLabel() ? 18 : 0);\n const ph = Math.max(40, H - top - bottom);\n value.range([top + ph, top]);\n if (!percent && this.yMin() === null && this.yMax() === null) value.nice(tickCount(ph, 52));\n valueTicks = value.ticks(tickCount(ph, 52));\n const left = Math.ceil(Math.max(0, ...uniqueLabels(valueTicks, maker).map((l) => textWidth(l)))) + 12 + (this.yLabel() ? 18 : 0);\n plot = { left, top, width: Math.max(10, W - left - 12), height: ph };\n } else {\n const maxLabel = Math.min(Math.max(80, W * 0.32), 200);\n const left = Math.ceil(Math.min(maxLabel, Math.max(0, ...catLabels.map((l) => textWidth(l))))) + 14 + (this.yLabel() ? 18 : 0);\n const right = 14 + (showValues ? Math.ceil(valueLabelW) + 8 : 0);\n // Value-axis reference lines run vertically here; their labels need a strip above the plot.\n const top = this.annotations().some((a) => a.label && a.type === 'line' && (a.axis ?? 'y') === 'y') ? 22 : 8;\n const bottom = 26 + (this.xLabel() ? 18 : 0);\n plot = { left, top, width: Math.max(10, W - left - right), height: Math.max(20, H - top - bottom) };\n value.range([plot.left, plot.left + plot.width]);\n if (!percent && this.yMin() === null && this.yMax() === null) value.nice(tickCount(plot.width, 90));\n valueTicks = value.ticks(tickCount(plot.width, 90));\n // Keep tick labels from touching.\n while (valueTicks.length > 2 && Math.max(...valueTicks.map((t) => textWidth(fa(t)))) + 16 > plot.width / valueTicks.length) {\n valueTicks = valueTicks.filter((_, i) => i % 2 === 0);\n }\n }\n if (plot.width < 40) return null;\n\n const band = scaleBand<number>()\n .domain(order)\n .range(horizontal ? [plot.top, plot.top + plot.height] : [plot.left, plot.left + plot.width])\n .paddingInner(this.stacked() || this.barSeries().length <= 1 ? 0.3 : 0.22)\n .paddingOuter(0.12);\n\n const G = this.groupCount();\n const bw = band.bandwidth();\n const barSize = Math.max(1, Math.min(this.maxBarSize(), (bw - (G - 1) * GAP) / G));\n const groupSize = G * barSize + (G - 1) * GAP;\n\n const valueLabels = uniqueLabels(valueTicks, maker);\n const valueTickModel: AxisTick[] = valueTicks.map((t, i) => ({ pos: value(t), label: valueLabels[i] }));\n let catTicks: AxisTick[] = order.map((i, k) => ({ pos: (band(i) ?? 0) + bw / 2, label: catLabels[k] }));\n if (horizontal) {\n const maxLabel = plot.left - 14 - (this.yLabel() ? 18 : 0);\n catTicks = catTicks.map((t) => ({ ...t, label: fitText(t.label, maxLabel) }));\n } else {\n catTicks = thinOrTruncate(catTicks, band.step());\n }\n\n const base = value(Math.max(value.domain()[0], Math.min(value.domain()[1], 0)));\n return {\n width: W,\n height: H,\n horizontal,\n plot,\n value,\n band,\n bw,\n barSize,\n groupSize,\n base,\n grid: this.grid() ?? (horizontal ? 'x' : 'y'),\n xTicks: horizontal ? valueTickModel : catTicks,\n yTicks: horizontal ? catTicks : valueTickModel,\n } as const;\n });\n\n /** Formatted values that may be printed as labels (for margin sizing). */\n private readonly labelTexts = computed(() => {\n const out: string[] = [];\n const { cats } = this.raw();\n const values = this.rawValues();\n const bars = this.barSeries();\n const fmt = valueFormatter(this.loc(), this.valueFormat());\n if (this.stack() === 'percent') return [];\n if (this.stacked()) {\n cats.forEach((_, i) => out.push(fmt(bars.reduce((s, b) => s + (values.get(b.key)?.[i] ?? 0), 0))));\n } else {\n for (const b of bars) for (const v of values.get(b.key) ?? []) if (v !== null) out.push(b.fmt(v));\n }\n return out;\n });\n\n // --- Geometry ---------------------------------------------------------------------------------\n\n /** Target pixel geometry per bar / line point, plus the non-animated facts about each bar. */\n private readonly targetModel = computed(() => {\n const L = this.layout();\n const geo = new Map<string, readonly number[]>();\n const meta = new Map<string, BarMeta>();\n if (!L) return { geo, meta };\n const { cats } = this.raw();\n const extents = this.extents();\n const bars = this.barSeries();\n const stacked = this.stacked();\n const values = this.rawValues();\n const colorFn = this.barColor();\n\n for (const i of this.order()) {\n const bandStart = L.band(i) ?? 0;\n const groupStart = bandStart + (L.bw - L.groupSize) / 2;\n // d3 stacks in key order, so the LAST series of each sign is the outermost — it gets the\n // rounded data end; inner segments stay square.\n let outerPos: string | null = null;\n let outerNeg: string | null = null;\n if (stacked) {\n for (const s of bars) {\n const raw = values.get(s.key)?.[i] ?? 0;\n if (raw > 0) outerPos = s.key;\n else if (raw < 0) outerNeg = s.key;\n }\n }\n bars.forEach((s, si) => {\n const e = extents.get(s.key)?.[i];\n const raw = values.get(s.key)?.[i] ?? null;\n if (!e || raw === null) return;\n const negative = raw < 0;\n // Grouped: [0, v]. Stacked (diverging): negatives are [far, near-zero].\n const baseSide = stacked && negative ? e[1] : e[0];\n const dataSide = stacked && negative ? e[0] : e[1];\n let p0 = L.value(baseSide);\n const p1 = L.value(dataSide);\n // Surface gap between stacked segments (never against the baseline itself).\n if (stacked && baseSide !== 0) {\n const dir = Math.sign(p1 - p0) || 1;\n p0 += dir * GAP;\n if ((p1 - p0) * dir < 0) p0 = p1;\n }\n const c0 = groupStart + (stacked ? 0 : si * (L.barSize + GAP));\n const key = `${s.key}|${cats[i].key}`;\n geo.set(key, L.horizontal ? [Math.min(p0, p1), c0, Math.abs(p1 - p0), L.barSize] : [c0, Math.min(p0, p1), L.barSize, Math.abs(p1 - p0)]);\n const custom = colorFn ? colorFn(cats[i].row, s.key, raw) : null;\n meta.set(key, {\n color: custom || s.color,\n end: L.horizontal ? (negative ? 'left' : 'right') : negative ? 'bottom' : 'top',\n series: s.key,\n category: i,\n rounded: !stacked || (negative ? outerNeg : outerPos) === s.key,\n });\n });\n // Combo lines: one point per category at the band centre.\n for (const s of this.lineSeries()) {\n const v = values.get(s.key)?.[i] ?? null;\n if (v !== null) geo.set(`${s.key}|${cats[i].key}`, [bandStart + L.bw / 2, L.value(v)]);\n }\n }\n return { geo, meta };\n });\n\n private readonly target = computed<Geometry>(() => this.targetModel().geo);\n private readonly meta = computed(() => this.targetModel().meta);\n\n /** Boolean, so a resize (width A → B) never counts as a data change: resizes snap, data animates. */\n private readonly ready = computed(() => this.width() > 0);\n private readonly version = computed(() => {\n this.data();\n this.series();\n this.hidden();\n this.stack();\n this.sort();\n this.orientation();\n this.yMin();\n this.yMax();\n return this.ready() ? {} : null;\n });\n\n private readonly geometry = createTween({\n target: () => this.target(),\n version: () => this.version(),\n enabled: () => this.animates(),\n enter: (key, to) => {\n const L = this.layout();\n if (!L) return to;\n if (to.length === 2) return [to[0], L.base];\n const m = this.meta().get(key);\n if (L.horizontal) {\n const start = m?.end === 'left' ? to[0] + to[2] : to[0];\n return [this.stacked() ? start : L.base, to[1], 0, to[3]];\n }\n const start = m?.end === 'bottom' ? to[1] : to[1] + to[3];\n return [to[0], this.stacked() ? start : L.base, to[2], 0];\n },\n });\n\n private readonly highlightSet = computed(() => {\n const h = this.highlightCategories();\n if (h === null || h === undefined) return null;\n const list = Array.isArray(h) ? h : [h];\n return new Set(list.map((v) => xKey(toX(v as SdsXValue))));\n });\n\n protected readonly bars = computed(() => {\n const geo = this.geometry();\n const focus = this.legendFocus();\n const hl = this.highlightSet();\n const r = this.radius();\n const { cats } = this.raw();\n const out: { id: string; d: string; color: string; dim: boolean }[] = [];\n const meta = this.meta();\n for (const [key, g] of geo) {\n const m = meta.get(key);\n if (!m || g.length !== 4) continue;\n const catKey = cats[m.category]?.base ?? '';\n const dim = (!!focus && focus !== m.series) || (!!hl && !hl.has(catKey));\n out.push({ id: key, d: barPath(g[0], g[1], g[2], g[3], m.rounded ? r : 0, m.end), color: m.color, dim });\n }\n return out;\n });\n\n protected readonly lines = computed(() => {\n const geo = this.geometry();\n const { cats } = this.raw();\n const order = this.order();\n const focus = this.legendFocus();\n const gen = d3line<readonly number[] | undefined>()\n .defined((d) => !!d)\n .x((d) => d![0])\n .y((d) => d![1])\n .curve(curveMonotoneX);\n return this.lineSeries().map((s) => {\n const seq = order.map((i) => geo.get(`${s.key}|${cats[i].key}`));\n return {\n key: s.key,\n color: s.color,\n dashed: !!s.def.dashed,\n dim: !!focus && focus !== s.key,\n d: gen(seq) ?? '',\n points: seq.filter((p): p is readonly number[] => !!p),\n };\n });\n });\n\n /** Value labels at the bar tips — dropped wherever they would not fit or would collide. */\n protected readonly valueLabels = computed(() => {\n const L = this.layout();\n if (!L || !this.showValues() || this.stack() === 'percent') return [];\n const geo = this.target();\n const { cats } = this.raw();\n const values = this.rawValues();\n const bars = this.barSeries();\n const out: { id: string; x: number; y: number; text: string; anchor: 'start' | 'middle' | 'end' }[] = [];\n const fmtTotal = valueFormatter(this.loc(), this.valueFormat());\n // Room a tip label may use: the whole band step when a category has one bar, else its own bar slot.\n const slot = this.stacked() || this.groupCount() === 1 ? L.band.step() - 4 : L.barSize + GAP;\n for (const i of this.order()) {\n const entries: { text: string; g: readonly number[]; negative: boolean }[] = [];\n if (this.stacked()) {\n const meta = this.meta();\n let total = 0;\n let pos: readonly number[] | null = null;\n let neg: readonly number[] | null = null;\n for (const s of bars) {\n total += values.get(s.key)?.[i] ?? 0;\n const key = `${s.key}|${cats[i].key}`;\n const m = meta.get(key);\n const g = geo.get(key);\n if (!g || !m?.rounded) continue;\n if (m.end === 'bottom' || m.end === 'left') neg = g;\n else pos = g;\n }\n const edge = total < 0 ? (neg ?? pos) : (pos ?? neg);\n if (edge) entries.push({ text: fmtTotal(total), g: edge, negative: total < 0 && edge === neg });\n } else {\n for (const s of bars) {\n const v = values.get(s.key)?.[i];\n const g = geo.get(`${s.key}|${cats[i].key}`);\n if (v === null || v === undefined || !g) continue;\n entries.push({ text: s.fmt(v), g, negative: v < 0 });\n }\n }\n for (const e of entries) {\n const w = textWidth(e.text, 11, 500);\n const [x, y, bw, bh] = e.g;\n if (L.horizontal) {\n if (bh < 9) continue;\n out.push({\n id: `${cats[i].key}-${e.text}-${out.length}`,\n x: e.negative ? x - 6 : x + bw + 6,\n y: y + bh / 2,\n text: e.text,\n anchor: e.negative ? 'end' : 'start',\n });\n } else {\n // One label too wide for its slot → drop them all: partial labels read as missing values.\n if (w > slot + 6) return [];\n out.push({\n id: `${cats[i].key}-${e.text}-${out.length}`,\n x: x + bw / 2,\n y: e.negative ? y + bh + 9 : y - 9,\n text: e.text,\n anchor: 'middle',\n });\n }\n }\n }\n return out;\n });\n\n protected readonly annotationsPx = computed(() => {\n const L = this.layout();\n if (!L) return [];\n const { cats } = this.raw();\n const mapValue = (v: SdsXValue) => {\n const n = num(v);\n return n === null ? null : L.value(n);\n };\n const mapCat = (v: SdsXValue) => {\n const k = xKey(toX(v));\n const i = cats.findIndex((c) => c.key === k);\n return i < 0 ? null : (L.band(i) ?? 0) + L.bw / 2;\n };\n if (!L.horizontal) return resolveAnnotations(this.annotations(), L.plot, mapCat, mapValue);\n // Horizontal: the value axis runs along x — swap the axes of every annotation.\n const swapped = this.annotations().map((a) => ({ ...a, axis: (a.axis ?? 'y') === 'y' ? ('x' as const) : ('y' as const) }));\n return resolveAnnotations(swapped as SdsChartAnnotation[], L.plot, mapValue, mapCat);\n });\n\n // --- Interaction ------------------------------------------------------------------------------\n\n /** One hit target per category — the whole band step, bigger than any bar in it. */\n protected readonly hits = computed(() => {\n const L = this.layout();\n if (!L) return [];\n const step = L.band.step();\n return this.order().map((i) => {\n const start = (L.band(i) ?? 0) - (step - L.bw) / 2;\n return L.horizontal\n ? { index: i, x: L.plot.left, y: start, w: L.plot.width, h: step }\n : { index: i, x: start, y: L.plot.top, w: step, h: L.plot.height };\n });\n });\n\n protected readonly hoverBand = computed(() => {\n const i = this.active();\n const L = this.layout();\n if (i === null || !L || !this.order().includes(i)) return null;\n const pad = Math.min(8, (L.band.step() - L.bw) / 2 + 4);\n const start = (L.band(i) ?? 0) - pad;\n return L.horizontal\n ? { x: L.plot.left, y: start, w: L.plot.width, h: L.bw + pad * 2 }\n : { x: start, y: L.plot.top, w: L.bw + pad * 2, h: L.plot.height };\n });\n\n protected readonly tooltipAt = computed(() => {\n const L = this.layout();\n const i = this.active();\n if (!L || i === null) return { x: 0, y: 0 };\n const centre = (L.band(i) ?? 0) + L.bw / 2;\n if (this.keyboard()) return L.horizontal ? { x: L.plot.left + L.plot.width / 2, y: centre } : { x: centre, y: L.plot.top + L.plot.height / 3 };\n return L.horizontal ? { x: this.pointer().x, y: centre } : { x: centre + L.bw / 2, y: this.pointer().y };\n });\n\n protected readonly tooltipCtx = computed<SdsChartTooltipContext<T> | null>(() => {\n const i = this.active();\n if (i === null) return null;\n const { cats } = this.raw();\n const c = cats[i];\n if (!c) return null;\n const values = this.rawValues();\n const vis = this.visible();\n const percent = this.stack() === 'percent';\n const pct = valueFormatter(this.loc(), PERCENT_VALUE);\n const bars = this.barSeries();\n const total = bars.reduce((s, b) => s + (values.get(b.key)?.[i] ?? 0), 0);\n const rows = vis.map((s) => {\n const raw = values.get(s.key)?.[i] ?? null;\n let value = raw === null ? '—' : s.fmt(raw);\n if (percent && !s.line && raw !== null && total) value += ` · ${pct(raw / total)}`;\n const m = this.meta().get(`${s.key}|${c.key}`);\n return { key: s.key, label: s.label, value, raw, color: m?.color ?? s.color, shape: s.line ? ('line' as const) : ('rect' as const) };\n });\n const footer = this.stacked() && bars.length > 1 ? `${this.text().total} · ${valueFormatter(this.loc(), this.valueFormat())(total)}` : undefined;\n return { title: this.fmtCat()(c.x), rows, footer, data: [c.row], index: c.index };\n });\n\n protected readonly liveText = computed(() => {\n if (!this.keyboard()) return '';\n const c = this.tooltipCtx();\n return c ? `${c.title} — ${c.rows.map((r) => this.text().labelValue(r.label, r.value)).join(', ')}${c.footer ? `, ${c.footer}` : ''}` : '';\n });\n\n private local(event: PointerEvent): { x: number; y: number } {\n const L = this.layout();\n const svg = (event.currentTarget as SVGElement).ownerSVGElement;\n const rect = svg?.getBoundingClientRect();\n if (!L || !rect?.width) return { x: 0, y: 0 };\n return { x: ((event.clientX - rect.left) / rect.width) * L.width, y: ((event.clientY - rect.top) / rect.height) * L.height };\n }\n\n protected enter(index: number, event: PointerEvent): void {\n this.keyboard.set(false);\n this.pointer.set(this.local(event));\n this.active.set(index);\n }\n\n protected move(event: PointerEvent): void {\n this.pointer.set(this.local(event));\n }\n\n protected onClick(index: number, event?: MouseEvent): void {\n const { cats } = this.raw();\n const c = cats[index];\n if (!c) return;\n // The series whose bar sits under the pointer, else the first visible one.\n let key = this.visible()[0]?.key;\n if (event) {\n const p = this.pointer();\n const geo = this.target();\n for (const s of this.barSeries()) {\n const g = geo.get(`${s.key}|${c.key}`);\n if (g && p.x >= g[0] - 1 && p.x <= g[0] + g[2] + 1 && p.y >= g[1] - 1 && p.y <= g[1] + g[3] + 1) key = s.key;\n }\n }\n if (!key) return;\n this.pointClick.emit({ key, row: c.row, index: c.index, value: this.rawValues().get(key)?.[index] ?? null, x: c.x });\n }\n\n protected onKey(event: KeyboardEvent): void {\n const order = this.order();\n if (!order.length) return;\n // indexOf is -1 for an index that no longer exists (data shrank) — treated as \"nothing active\".\n const pos = this.active() === null ? -1 : order.indexOf(this.active()!);\n let next = pos;\n const fwd = this.horizontal() ? 'ArrowDown' : 'ArrowRight';\n const back = this.horizontal() ? 'ArrowUp' : 'ArrowLeft';\n switch (event.key) {\n case fwd:\n next = pos < 0 ? 0 : Math.min(order.length - 1, pos + 1);\n break;\n case back:\n next = pos < 0 ? order.length - 1 : Math.max(0, pos - 1);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = order.length - 1;\n break;\n case 'Escape':\n this.active.set(null);\n return;\n case 'Enter':\n case ' ':\n if (this.active() !== null) {\n event.preventDefault();\n this.onClick(this.active()!);\n }\n return;\n default:\n return;\n }\n event.preventDefault();\n this.keyboard.set(true);\n this.active.set(order[next]);\n }\n\n protected toggleSeries(key: string): void {\n const hidden = new Set(this.hidden());\n if (hidden.has(key)) hidden.delete(key);\n else if (this.visible().length > 1) hidden.add(key);\n this.hidden.set([...hidden]);\n }\n\n // --- Chrome -----------------------------------------------------------------------------------\n\n protected readonly legendPosition = computed(() => {\n const l = this.legend();\n if (l === 'none') return 'none' as const;\n if (l === 'auto') return this.series().length > 1 ? ('top' as const) : ('none' as const);\n return l;\n });\n\n protected readonly legendItems = computed<LegendItem[]>(() =>\n this.allSeries().map((s) => ({ key: s.key, label: s.label, color: s.color, shape: s.line ? 'line' : 'rect', dashed: !!s.def.dashed })),\n );\n\n protected readonly label = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel()!;\n const names = this.allSeries().map((s) => s.label).join(', ');\n return [this.heading() || this.text().barChart, names].filter(Boolean).join(' — ');\n });\n\n protected readonly table = computed<ChartTable>(() => {\n const { cats } = this.raw();\n const vis = this.visible();\n const values = this.rawValues();\n const fc = this.fmtCat();\n return {\n columns: [this.xLabel() || this.text().category, ...vis.map((s) => s.label)],\n rows: this.order().map((i) => [\n fc(cats[i].x),\n ...vis.map((s) => {\n const v = values.get(s.key)?.[i] ?? null;\n return v === null ? '—' : s.fmt(v);\n }),\n ]),\n };\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { scaleLinear, scaleLog, scaleSqrt, scaleTime } from 'd3-scale';\nimport { Delaunay } from 'd3-delaunay';\nimport {\n SdsAccessor,\n SdsChartAnnotation,\n SdsChartGrid,\n SdsChartLegend,\n SdsChartPointEvent,\n SdsChartScale,\n SdsChartTooltipContext,\n SdsNumberFormat,\n SdsXFormat,\n SdsXValue,\n} from './chart-types';\nimport {\n access,\n annotationValues,\n AxisTick,\n axisFormatter,\n chartAnimates,\n chartLabels,\n chartLocale,\n chartPalette,\n chartUid,\n createTween,\n Geometry,\n hostWidth,\n num,\n PlotRect,\n resolveAnnotations,\n slotColor,\n textWidth,\n tickCount,\n timeGranularity,\n timeTickFormatter,\n toX,\n uniqueLabels,\n valueFormatter,\n xFormatter,\n} from './chart-core';\nimport { ChartTable, LegendItem, SdsChartAnnotations, SdsChartAxes, SdsChartFrame, SdsChartTooltipBox } from './chart-parts';\nimport { SdsChartTooltip } from './sds-chart-tooltip';\n\ninterface Dot<T> {\n row: T;\n index: number;\n id: string;\n x: number;\n xDate: boolean;\n y: number;\n size: number | null;\n group: string;\n label: string;\n}\n\n/**\n * Scatter and bubble chart for relationships between two measures — with an optional third measure\n * as bubble area and a categorical group as colour. Linear / log / time axes, per-group least-squares\n * trend lines, reference lines and bands on either axis, nearest-point hover (a Delaunay search, so\n * the pointer only has to be closest — never dead-centre on an 8 px dot), keyboard stepping and a\n * data-table twin. Keep groups to three or fewer: past that, colours stop separating in a cloud.\n *\n * @example\n * <sds-scatter-chart\n * [data]=\"patients\"\n * x=\"age\"\n * y=\"duree\"\n * group=\"service\"\n * size=\"cout\"\n * xLabel=\"Âge\"\n * yLabel=\"Durée de séjour (j)\"\n * trendline\n * />\n */\n@Component({\n selector: 'sds-scatter-chart',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsChartFrame, SdsChartAxes, SdsChartAnnotations, SdsChartTooltipBox],\n host: { class: 'block' },\n template: `\n <sds-chart-frame\n [heading]=\"heading()\"\n [subtitle]=\"subtitle()\"\n [items]=\"legendItems()\"\n [legend]=\"legendPosition()\"\n [hidden]=\"hidden()\"\n [loading]=\"loading()\"\n [empty]=\"isEmpty()\"\n [emptyText]=\"emptyText()\"\n [height]=\"height()\"\n [table]=\"table()\"\n [tableCaption]=\"label()\"\n [tableToggle]=\"tableToggle()\"\n (toggle)=\"toggleGroup($event)\"\n (focusKey)=\"legendFocus.set($event)\"\n >\n <div\n class=\"relative rounded-control outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n [style.height.px]=\"height()\"\n tabindex=\"0\"\n role=\"group\"\n [attr.aria-roledescription]=\"text().chartRole\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onKey($event)\"\n (blur)=\"onBlur()\"\n >\n @if (layout(); as L) {\n <svg class=\"block overflow-visible\" style=\"width: 100%; height: 100%\" [attr.viewBox]=\"'0 0 ' + L.width + ' ' + L.height\" aria-hidden=\"true\">\n <defs>\n <clipPath [attr.id]=\"uid + '-clip'\">\n <rect [attr.x]=\"L.plot.left - L.clipPad\" [attr.y]=\"L.plot.top - L.clipPad\" [attr.width]=\"L.plot.width + L.clipPad * 2\" [attr.height]=\"L.plot.height + L.clipPad * 2\" />\n </clipPath>\n </defs>\n <g sdsChartAnnotations [items]=\"annotationsPx()\" layer=\"band\" />\n <g\n sdsChartAxes\n [plot]=\"L.plot\"\n [width]=\"L.width\"\n [xTicks]=\"L.xTicks\"\n [yTicks]=\"L.yTicks\"\n [grid]=\"grid()\"\n [baselineY]=\"L.plot.top + L.plot.height\"\n [xTitle]=\"xLabel()\"\n [yTitle]=\"yLabel()\"\n />\n\n @if (activeDot(); as a) {\n <g stroke=\"var(--color-ink-faint)\" stroke-width=\"1\" shape-rendering=\"crispEdges\">\n <line [attr.x1]=\"a.cx\" [attr.x2]=\"a.cx\" [attr.y1]=\"a.cy + a.r + 2\" [attr.y2]=\"L.plot.top + L.plot.height\" />\n <line [attr.x1]=\"L.plot.left\" [attr.x2]=\"a.cx - a.r - 2\" [attr.y1]=\"a.cy\" [attr.y2]=\"a.cy\" />\n </g>\n }\n\n <g [attr.clip-path]=\"'url(#' + uid + '-clip)'\">\n @for (t of trends(); track t.group) {\n <line\n [attr.x1]=\"t.x1\"\n [attr.y1]=\"t.y1\"\n [attr.x2]=\"t.x2\"\n [attr.y2]=\"t.y2\"\n [style.stroke]=\"t.color\"\n stroke-width=\"1.5\"\n stroke-dasharray=\"6 4\"\n class=\"transition-opacity duration-200\"\n [style.opacity]=\"t.dim ? 0.15 : 0.9\"\n />\n }\n @for (d of dots(); track d.id) {\n <circle\n [attr.cx]=\"d.cx\"\n [attr.cy]=\"d.cy\"\n [attr.r]=\"d.r\"\n [style.fill]=\"d.color\"\n [attr.fill-opacity]=\"bubbles() ? 0.78 : 0.92\"\n stroke=\"var(--color-surface)\"\n stroke-width=\"1.5\"\n class=\"transition-opacity duration-200\"\n [style.opacity]=\"d.dim ? 0.15 : 1\"\n />\n }\n </g>\n\n @if (activeDot(); as a) {\n <circle [attr.cx]=\"a.cx\" [attr.cy]=\"a.cy\" [attr.r]=\"a.r + 2.5\" fill=\"none\" [style.stroke]=\"a.color\" stroke-width=\"2\" />\n }\n\n <g sdsChartAnnotations [items]=\"annotationsPx()\" layer=\"line\" />\n\n <rect\n [attr.x]=\"L.plot.left\"\n [attr.y]=\"L.plot.top\"\n [attr.width]=\"L.plot.width\"\n [attr.height]=\"L.plot.height\"\n fill=\"transparent\"\n [style.cursor]=\"active() !== null ? 'pointer' : 'default'\"\n (pointermove)=\"onPointer($event)\"\n (pointerdown)=\"onPointer($event)\"\n (pointerleave)=\"active.set(null)\"\n (click)=\"onClick()\"\n />\n </svg>\n\n @if (tooltip()) {\n <sds-chart-tooltip-box\n [ctx]=\"tooltipCtx()\"\n [template]=\"customTooltip()?.template ?? null\"\n [x]=\"activeDot()?.cx ?? 0\"\n [y]=\"activeDot()?.cy ?? 0\"\n [containerWidth]=\"L.width\"\n [containerHeight]=\"L.height\"\n />\n }\n }\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">{{ liveText() }}</div>\n </div>\n </sds-chart-frame>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n }\n `,\n})\nexport class SdsScatterChart<T = any> {\n // --- Data -------------------------------------------------------------------------------------\n readonly data = input<readonly T[] | null | undefined>([]);\n /** Horizontal measure: numbers, Dates or ISO strings. */\n readonly x = input.required<SdsAccessor<T, SdsXValue>>();\n /** Vertical measure. */\n readonly y = input.required<SdsAccessor<T, number | null | undefined>>();\n /** Optional third measure, encoded as bubble AREA (not radius — area reads true). */\n readonly size = input<SdsAccessor<T, number | null | undefined> | null>(null);\n /** Optional categorical field coloured by slot. Three groups or fewer read best. */\n readonly group = input<SdsAccessor<T, string | null | undefined> | null>(null);\n /** Optional point name for the tooltip heading and the table (also the point's animation identity). */\n readonly pointLabel = input<SdsAccessor<T, string | null | undefined> | null>(null);\n /** Fix the group order (and so their colours) instead of first-appearance order. */\n readonly groupOrder = input<readonly string[] | null>(null);\n\n // --- Look -------------------------------------------------------------------------------------\n readonly heading = input<string>('');\n readonly subtitle = input<string>('');\n readonly height = input(320, { transform: numberAttribute });\n /** Dot radius when there is no `size` measure. */\n readonly radius = input(5, { transform: numberAttribute });\n /** Largest bubble radius when `size` is set. */\n readonly maxRadius = input(20, { transform: numberAttribute });\n /** Draw a least-squares trend line per group (dashed — it is a model, not data). Linear axes only. */\n readonly trendline = input(false, { transform: booleanAttribute });\n readonly grid = input<SdsChartGrid>('both');\n readonly legend = input<SdsChartLegend>('auto');\n readonly annotations = input<readonly SdsChartAnnotation[]>([]);\n\n // --- Scales & formats -------------------------------------------------------------------------\n readonly xScale = input<SdsChartScale>('linear');\n readonly yScale = input<SdsChartScale>('linear');\n readonly xMin = input<number | null>(null);\n readonly xMax = input<number | null>(null);\n readonly yMin = input<number | null>(null);\n readonly yMax = input<number | null>(null);\n readonly includeZero = input(false, { transform: booleanAttribute });\n readonly xFormat = input<SdsXFormat | null>(null);\n readonly valueFormat = input<SdsNumberFormat | null>(null);\n /** Override the y-axis tick format (defaults to a compact form of `valueFormat`). */\n readonly axisFormat = input<SdsNumberFormat | null>(null);\n readonly sizeFormat = input<SdsNumberFormat | null>(null);\n readonly xLabel = input<string>('');\n readonly yLabel = input<string>('');\n /** Name of the bubble size (tooltip, table). Default (`null`): the configured `labels.size`. */\n readonly sizeLabel = input<string | null>(null);\n protected readonly sizeName = computed(() => this.sizeLabel() ?? this.text().size);\n readonly locale = input<string | null>(null);\n\n // --- Behaviour --------------------------------------------------------------------------------\n readonly tooltip = input(true, { transform: booleanAttribute });\n readonly animate = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n /** Empty-state text. Default (`null`): the configured `labels.empty` (\"No data to display\"). */\n readonly emptyText = input<string | null>(null);\n readonly tableToggle = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n /** Hidden group names (two-way bindable; the legend toggles them). */\n readonly hidden = model<readonly string[]>([]);\n\n readonly pointClick = output<SdsChartPointEvent<T>>();\n\n protected readonly customTooltip = contentChild(SdsChartTooltip);\n protected readonly uid = chartUid('sds-scatter');\n protected readonly legendFocus = signal<string | null>(null);\n protected readonly active = signal<number | null>(null);\n protected readonly keyboard = signal(false);\n\n /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */\n protected onBlur(): void {\n if (this.keyboard()) this.active.set(null);\n this.keyboard.set(false);\n }\n\n private readonly width = hostWidth();\n private readonly loc = chartLocale(() => this.locale());\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n protected readonly text = chartLabels();\n private readonly animates = chartAnimates(() => this.animate());\n private readonly palette = chartPalette();\n\n protected readonly bubbles = computed(() => this.size() !== null);\n\n private readonly points = computed(() => {\n const data = this.data() ?? [];\n const xAcc = this.x();\n const yAcc = this.y();\n const sAcc = this.size();\n const gAcc = this.group();\n const lAcc = this.pointLabel();\n const out: Dot<T>[] = [];\n const ids = new Map<string, number>();\n data.forEach((row, index) => {\n const rx = toX(access(xAcc, row, index));\n const xDate = rx instanceof Date;\n const x = xDate ? (rx as Date).getTime() : num(rx);\n const y = num(access(yAcc, row, index));\n if (x === null || y === null) return;\n if (this.xScale() === 'log' && x <= 0) return;\n if (this.yScale() === 'log' && y <= 0) return;\n const label = lAcc ? String(access(lAcc, row, index) ?? '') : '';\n const base = label || `#${index}`;\n const n = ids.get(base) ?? 0;\n ids.set(base, n + 1);\n out.push({\n row,\n index,\n id: n ? `${base}~${n}` : base,\n x,\n xDate,\n y,\n size: sAcc ? num(access(sAcc, row, index)) : null,\n group: gAcc ? String(access(gAcc, row, index) ?? '—') : '',\n label,\n });\n });\n return out;\n });\n\n private readonly xIsTime = computed(() => {\n const pts = this.points();\n return pts.length > 0 && pts.every((p) => p.xDate);\n });\n\n /** Groups in colour order; a group keeps its slot when others are hidden. */\n protected readonly groups = computed(() => {\n const order = this.groupOrder();\n const seen: string[] = order ? [...order] : [];\n for (const p of this.points()) if (!seen.includes(p.group)) seen.push(p.group);\n return seen.map((name, i) => ({ name, color: slotColor(i, this.palette) }));\n });\n\n private readonly colorOf = computed(() => new Map(this.groups().map((g) => [g.name, g.color])));\n\n private readonly visiblePoints = computed(() => {\n const hidden = new Set(this.hidden());\n return this.points().filter((p) => !hidden.has(p.group));\n });\n\n protected readonly isEmpty = computed(() => this.visiblePoints().length === 0 && this.points().length === 0);\n\n private readonly fmtY = computed(() => valueFormatter(this.loc(), this.valueFormat()));\n private readonly fmtSize = computed(() => valueFormatter(this.loc(), this.sizeFormat()));\n private readonly fmtX = computed(() => {\n if (this.xIsTime()) {\n const f = xFormatter('time', this.loc(), this.xFormat(), timeGranularity(this.points().map((p) => p.x).sort((a, b) => a - b)));\n return (v: number) => f(new Date(v));\n }\n const f = xFormatter('linear', this.loc(), this.xFormat(), 0);\n return (v: number) => f(v);\n });\n\n protected readonly layout = computed(() => {\n const W = this.width();\n const H = this.height();\n const pts = this.points();\n if (W <= 0 || !pts.length) return null;\n const domain = (vals: number[], extra: number[], zero: boolean, min: number | null, max: number | null, log: boolean): [number, number] => {\n let lo = Math.min(...vals, ...extra);\n let hi = Math.max(...vals, ...extra);\n if (zero && !log) {\n lo = Math.min(0, lo);\n hi = Math.max(0, hi);\n }\n if (min !== null) lo = min;\n if (max !== null) hi = max;\n if (log && lo <= 0) {\n const positive = vals.filter((v) => v > 0);\n lo = positive.length ? Math.min(...positive) : hi > 1 ? 1 : hi / 1000 || 1e-6;\n }\n if (lo === hi) {\n const pad = Math.abs(lo) * 0.1 || 1;\n lo = log ? lo / 2 : lo - pad;\n hi += pad;\n }\n return [lo, hi];\n };\n // Domains come from ALL points so toggling a group does not rescale the axes under the reader.\n const xLog = this.xScale() === 'log';\n const yLog = this.yScale() === 'log';\n const xd = domain(pts.map((p) => p.x), this.xIsTime() ? [] : annotationValues(this.annotations(), 'x'), this.includeZero(), this.xMin(), this.xMax(), xLog);\n const yd = domain(pts.map((p) => p.y), annotationValues(this.annotations(), 'y'), this.includeZero(), this.yMin(), this.yMax(), yLog);\n\n const maxR = this.bubbles() ? this.maxRadius() : this.radius();\n const top = 12 + Math.min(maxR, 12);\n const bottom = 26 + (this.xLabel() ? 18 : 0);\n const ph = Math.max(40, H - top - bottom);\n const y = (yLog ? scaleLog() : scaleLinear()).domain(yd).range([top + ph, top]);\n if (this.yMin() === null && this.yMax() === null) y.nice(tickCount(ph, 52));\n let yVals = y.ticks(tickCount(ph, 52));\n if (yLog && yVals.length > 8) yVals = yVals.filter((t) => Math.abs(Math.log10(t) % 1) < 1e-9);\n const yl = uniqueLabels(yVals, (d) => axisFormatter(this.loc(), this.axisFormat(), this.valueFormat(), d));\n const left = Math.ceil(Math.max(0, ...yl.map((l) => textWidth(l)))) + 12 + (this.yLabel() ? 18 : 0);\n const right = 12 + Math.min(maxR, 12);\n const plot: PlotRect = { left, top, width: Math.max(10, W - left - right), height: ph };\n if (plot.width < 40) return null;\n\n let xTicks: AxisTick[];\n let x: (v: number) => number;\n if (this.xIsTime()) {\n const sx = scaleTime().domain([new Date(xd[0]), new Date(xd[1])]).range([plot.left, plot.left + plot.width]);\n x = (v) => sx(new Date(v));\n const ticks = sx.ticks(tickCount(plot.width, 96));\n const f = timeTickFormatter(this.loc(), ticks, this.xFormat());\n xTicks = ticks.map((d, i) => ({ pos: sx(d), label: f(d, i) }));\n } else {\n const sx = (xLog ? scaleLog() : scaleLinear()).domain(xd).range([plot.left, plot.left + plot.width]);\n if (this.xMin() === null && this.xMax() === null) sx.nice(tickCount(plot.width, 90));\n x = (v) => sx(v);\n let ticks = sx.ticks(tickCount(plot.width, 90));\n if (xLog && ticks.length > 8) ticks = ticks.filter((t) => Math.abs(Math.log10(t) % 1) < 1e-9);\n const xl = this.xFormat() ? ticks.map((t) => this.fmtX()(t)) : uniqueLabels(ticks, (d) => axisFormatter(this.loc(), null, null, d));\n xTicks = ticks.map((t, i) => ({ pos: sx(t), label: xl[i] }));\n }\n const sizes = pts.map((p) => p.size).filter((v): v is number => v !== null && v >= 0);\n const r = scaleSqrt()\n .domain([0, Math.max(1, ...sizes)])\n .range([0, this.maxRadius()]);\n const radius = (p: Dot<T>) => (this.bubbles() ? Math.max(2.5, r(Math.max(0, p.size ?? 0))) : this.radius());\n return {\n width: W,\n height: H,\n plot,\n x,\n y: (v: number) => y(v),\n radius,\n xTicks,\n yTicks: yVals.map((v, i) => ({ pos: y(v), label: yl[i] })),\n clipPad: maxR + 2,\n };\n });\n\n private readonly target = computed<Geometry>(() => {\n const L = this.layout();\n const out = new Map<string, readonly number[]>();\n if (!L) return out;\n for (const p of this.visiblePoints()) out.set(p.id, [L.x(p.x), L.y(p.y), L.radius(p)]);\n return out;\n });\n\n /** Boolean, so a resize (width A → B) never counts as a data change: resizes snap, data animates. */\n private readonly ready = computed(() => this.width() > 0);\n private readonly version = computed(() => {\n this.data();\n this.hidden();\n this.xScale();\n this.yScale();\n return this.ready() ? {} : null;\n });\n\n private readonly geometry = createTween({\n target: () => this.target(),\n version: () => this.version(),\n enabled: () => this.animates(),\n enter: (_k, to) => [to[0], to[1], 0],\n });\n\n protected readonly dots = computed(() => {\n const geo = this.geometry();\n const colors = this.colorOf();\n const focus = this.legendFocus();\n const vis = this.visiblePoints();\n const out = [];\n for (const p of vis) {\n const g = geo.get(p.id);\n if (!g) continue;\n out.push({ id: p.id, cx: g[0], cy: g[1], r: g[2], color: colors.get(p.group) ?? slotColor(0), dim: !!focus && focus !== p.group, size: p.size ?? 0 });\n }\n // Big bubbles underneath, so small ones stay visible and hoverable.\n if (this.bubbles()) out.sort((a, b) => b.size - a.size);\n return out;\n });\n\n /** Least-squares fit per visible group, drawn across that group's own x range. */\n protected readonly trends = computed(() => {\n const L = this.layout();\n // A straight least-squares fit is meaningless on a log axis, so it is not drawn there.\n if (!L || !this.trendline() || this.xScale() === 'log' || this.yScale() === 'log') return [];\n const byGroup = new Map<string, Dot<T>[]>();\n for (const p of this.visiblePoints()) {\n const list = byGroup.get(p.group) ?? [];\n list.push(p);\n byGroup.set(p.group, list);\n }\n const colors = this.colorOf();\n const focus = this.legendFocus();\n const out: { group: string; x1: number; y1: number; x2: number; y2: number; color: string; dim: boolean }[] = [];\n for (const [group, list] of byGroup) {\n if (list.length < 3) continue;\n const n = list.length;\n const mx = list.reduce((s, p) => s + p.x, 0) / n;\n const my = list.reduce((s, p) => s + p.y, 0) / n;\n let sxx = 0;\n let sxy = 0;\n for (const p of list) {\n sxx += (p.x - mx) ** 2;\n sxy += (p.x - mx) * (p.y - my);\n }\n if (!sxx) continue;\n const slope = sxy / sxx;\n const icpt = my - slope * mx;\n const x0 = Math.min(...list.map((p) => p.x));\n const x1 = Math.max(...list.map((p) => p.x));\n out.push({\n group,\n x1: L.x(x0),\n y1: L.y(icpt + slope * x0),\n x2: L.x(x1),\n y2: L.y(icpt + slope * x1),\n color: colors.get(group) ?? slotColor(0),\n dim: !!focus && focus !== group,\n });\n }\n return out;\n });\n\n protected readonly annotationsPx = computed(() => {\n const L = this.layout();\n if (!L) return [];\n const mapX = (v: SdsXValue) => {\n const t = toX(v);\n const n = t instanceof Date ? t.getTime() : num(t);\n return n === null ? null : L.x(n);\n };\n return resolveAnnotations(this.annotations(), L.plot, mapX, (v) => {\n const n = num(v);\n return n === null ? null : L.y(n);\n });\n });\n\n // --- Interaction ------------------------------------------------------------------------------\n\n /** Nearest-point index, rebuilt only when the geometry settles. */\n private readonly delaunay = computed(() => {\n const geo = this.target();\n const vis = this.visiblePoints();\n const coords = vis.map((p) => geo.get(p.id) ?? [0, 0, 0]);\n return { d: Delaunay.from(coords, (c) => c[0], (c) => c[1]), coords, vis };\n });\n\n protected readonly activeDot = computed(() => {\n const i = this.active();\n if (i === null) return null;\n const { coords, vis } = this.delaunay();\n const c = coords[i];\n const p = vis[i];\n if (!c || !p) return null;\n return { cx: c[0], cy: c[1], r: c[2], color: this.colorOf().get(p.group) ?? slotColor(0) };\n });\n\n protected readonly tooltipCtx = computed<SdsChartTooltipContext<T> | null>(() => {\n const i = this.active();\n if (i === null) return null;\n const p = this.delaunay().vis[i];\n if (!p) return null;\n const color = this.colorOf().get(p.group) ?? slotColor(0);\n const rows = [\n { key: 'x', label: this.xLabel() || 'x', value: this.fmtX()(p.x), raw: p.x, color, shape: 'dot' as const },\n { key: 'y', label: this.yLabel() || 'y', value: this.fmtY()(p.y), raw: p.y, color, shape: 'dot' as const },\n ];\n if (this.bubbles() && p.size !== null) rows.push({ key: 'size', label: this.sizeName(), value: this.fmtSize()(p.size), raw: p.size, color, shape: 'dot' });\n const title = [p.label, p.group].filter(Boolean).join(' · ');\n return { title, rows, data: [p.row], index: p.index };\n });\n\n protected readonly liveText = computed(() => {\n if (!this.keyboard()) return '';\n const c = this.tooltipCtx();\n return c ? `${c.title} — ${c.rows.map((r) => this.text().labelValue(r.label, r.value)).join(', ')}` : '';\n });\n\n protected onPointer(event: PointerEvent): void {\n const L = this.layout();\n const svg = (event.currentTarget as SVGElement).ownerSVGElement;\n const rect = svg?.getBoundingClientRect();\n if (!L || !rect?.width) return;\n const px = ((event.clientX - rect.left) / rect.width) * L.width;\n const py = ((event.clientY - rect.top) / rect.height) * L.height;\n const { d, coords } = this.delaunay();\n if (!coords.length) return;\n const i = d.find(px, py);\n const c = coords[i];\n const dist = c ? Math.hypot(c[0] - px, c[1] - py) : Infinity;\n this.keyboard.set(false);\n // A generous radius (≥ 24 px target) — but not so wide that empty space claims a far point.\n this.active.set(dist <= Math.max(28, (c?.[2] ?? 0) + 14) ? i : null);\n }\n\n protected onClick(): void {\n const i = this.active();\n if (i === null) return;\n const p = this.delaunay().vis[i];\n if (p) this.pointClick.emit({ key: p.group || p.id, row: p.row, index: p.index, value: p.y, x: p.xDate ? new Date(p.x) : p.x });\n }\n\n /** Arrow keys step through the points in x order. */\n protected onKey(event: KeyboardEvent): void {\n const { vis } = this.delaunay();\n if (!vis.length) return;\n const order = vis.map((_, i) => i).sort((a, b) => vis[a].x - vis[b].x || vis[a].y - vis[b].y);\n const cur = this.active();\n const pos = cur === null ? -1 : order.indexOf(cur);\n let next = pos;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = pos < 0 ? 0 : Math.min(order.length - 1, pos + 1);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = pos < 0 ? order.length - 1 : Math.max(0, pos - 1);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = order.length - 1;\n break;\n case 'Escape':\n this.active.set(null);\n return;\n case 'Enter':\n case ' ':\n if (cur !== null) {\n event.preventDefault();\n this.onClick();\n }\n return;\n default:\n return;\n }\n event.preventDefault();\n this.keyboard.set(true);\n this.active.set(order[next]);\n }\n\n protected toggleGroup(name: string): void {\n const hidden = new Set(this.hidden());\n if (hidden.has(name)) hidden.delete(name);\n else if (new Set(this.visiblePoints().map((p) => p.group)).size > 1) hidden.add(name);\n this.hidden.set([...hidden]);\n this.active.set(null);\n }\n\n // --- Chrome -----------------------------------------------------------------------------------\n\n protected readonly legendPosition = computed(() => {\n const l = this.legend();\n if (l === 'none') return 'none' as const;\n if (l === 'auto') return this.groups().length > 1 ? ('top' as const) : ('none' as const);\n return l;\n });\n\n protected readonly legendItems = computed<LegendItem[]>(() =>\n this.groups().length > 1 ? this.groups().map((g) => ({ key: g.name, label: g.name, color: g.color, shape: 'dot' })) : [],\n );\n\n protected readonly label = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel()!;\n const y = this.yLabel();\n const x = this.xLabel();\n const axes = y && x ? this.text().versus(y, x) : y || x;\n return [this.heading() || this.text().scatterChart, axes].filter(Boolean).join(' — ');\n });\n\n protected readonly table = computed<ChartTable>(() => {\n const hasLabel = this.pointLabel() !== null;\n const hasGroup = this.groups().length > 1;\n const fx = this.fmtX();\n const fy = this.fmtY();\n const fs = this.fmtSize();\n const columns = [\n hasLabel ? '' : '#',\n ...(hasGroup ? [this.text().group] : []),\n this.xLabel() || 'x',\n this.yLabel() || 'y',\n ...(this.bubbles() ? [this.sizeName()] : []),\n ];\n return {\n columns,\n rows: this.visiblePoints().map((p) => [\n hasLabel ? p.label : String(p.index + 1),\n ...(hasGroup ? [p.group] : []),\n fx(p.x),\n fy(p.y),\n ...(this.bubbles() ? [p.size === null ? '—' : fs(p.size)] : []),\n ]),\n };\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { arc as d3arc, pie as d3pie } from 'd3-shape';\nimport { SdsAccessor, SdsChartLegend, SdsChartPointEvent, SdsChartTooltipContext, SdsNumberFormat } from './chart-types';\nimport {\n access,\n chartAnimates,\n chartLabels,\n chartLocale,\n chartPalette,\n createTween,\n fitText,\n Geometry,\n hostWidth,\n num,\n numberOrNull,\n PERCENT_VALUE,\n slotColor,\n valueFormatter,\n} from './chart-core';\nimport { ChartTable, LegendItem, SdsChartFrame, SdsChartTooltipBox } from './chart-parts';\nimport { SdsChartTooltip } from './sds-chart-tooltip';\n\n/** `donut` has a hole for a headline figure; `pie` is solid. */\nexport type SdsDonutVariant = 'donut' | 'pie';\n/** What the legend prints after each label (the chart's direct labels). */\nexport type SdsDonutLegendValue = 'percent' | 'value' | 'both' | 'none';\n/** Slice order: `desc` = largest first, `none` = data order. */\nexport type SdsDonutSort = 'desc' | 'none';\n\ninterface Slice<T> {\n key: string;\n label: string;\n value: number;\n color: string;\n rows: T[];\n index: number;\n other: boolean;\n}\n\n/** Key of the folded \"Other\" slice — in `hidden` and in `pointClick.key`. */\nexport const SDS_DONUT_OTHER_KEY = '__sds_other__';\nconst OTHER_KEY = SDS_DONUT_OTHER_KEY;\n\n/**\n * Donut, pie and half-donut for part-to-whole at a glance. Small tails fold into \"Other\" past\n * `maxSlices` (a pie stops reading beyond ~6 parts), the legend doubles as direct labels with each\n * share, the centre states the total and swaps to the hovered slice, slices separate with a\n * constant 2 px gap, and the whole thing is keyboard-navigable with a data-table twin. Colour follows\n * the category (its position in the data), never its rank.\n *\n * @example\n * <sds-donut-chart heading=\"Motifs de séjour\" [data]=\"rows\" category=\"motif\" value=\"sejours\" />\n */\n@Component({\n selector: 'sds-donut-chart',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsChartFrame, SdsChartTooltipBox],\n host: { class: 'block' },\n template: `\n <sds-chart-frame\n [heading]=\"heading()\"\n [subtitle]=\"subtitle()\"\n [items]=\"legendItems()\"\n [legend]=\"legendPosition()\"\n [hidden]=\"hidden()\"\n [loading]=\"loading()\"\n [empty]=\"isEmpty()\"\n [emptyText]=\"emptyText()\"\n [height]=\"boxHeight()\"\n [table]=\"table()\"\n [tableCaption]=\"label()\"\n [tableToggle]=\"tableToggle()\"\n (toggle)=\"toggleSlice($event)\"\n (focusKey)=\"focus.set($event)\"\n >\n <div\n class=\"relative mx-auto rounded-control outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"boxHeight()\"\n tabindex=\"0\"\n role=\"group\"\n [attr.aria-roledescription]=\"text().chartRole\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onKey($event)\"\n (blur)=\"onBlur()\"\n >\n @if (geo(); as G) {\n <svg class=\"block overflow-visible\" [attr.width]=\"size()\" [attr.height]=\"boxHeight()\" [attr.viewBox]=\"'0 0 ' + size() + ' ' + boxHeight()\" aria-hidden=\"true\">\n <g [attr.transform]=\"'translate(' + G.cx + ',' + G.cy + ')'\">\n @for (s of arcs(); track s.key) {\n <path\n [attr.d]=\"s.d\"\n [style.fill]=\"s.color\"\n [attr.transform]=\"s.shift\"\n class=\"cursor-pointer transition-[opacity,transform] duration-200 motion-reduce:transition-none\"\n [style.opacity]=\"s.dim ? 0.3 : 1\"\n (pointerenter)=\"hover(s.key, $event)\"\n (pointermove)=\"track($event)\"\n (pointerleave)=\"active.set(null)\"\n (click)=\"emit(s.key)\"\n />\n }\n @if (showCenter()) {\n <text text-anchor=\"middle\" [attr.y]=\"G.labelY\" class=\"fill-ink-faint\" [style.font-size.px]=\"G.labelSize\" style=\"font-weight: 500\">{{ center().label }}</text>\n <text text-anchor=\"middle\" [attr.y]=\"G.valueY\" class=\"fill-ink\" [style.font-size.px]=\"G.valueSize\" style=\"font-weight: 650\">{{ center().value }}</text>\n @if (center().sub) {\n <text text-anchor=\"middle\" [attr.y]=\"G.subY\" class=\"fill-ink-soft\" [style.font-size.px]=\"G.labelSize\">{{ center().sub }}</text>\n }\n }\n </g>\n </svg>\n @if (showTooltip()) {\n <sds-chart-tooltip-box\n [ctx]=\"tooltipCtx()\"\n [template]=\"customTooltip()?.template ?? null\"\n [x]=\"pointer().x\"\n [y]=\"pointer().y\"\n [containerWidth]=\"size()\"\n [containerHeight]=\"boxHeight()\"\n />\n }\n }\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">{{ liveText() }}</div>\n </div>\n </sds-chart-frame>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n }\n `,\n})\nexport class SdsDonutChart<T = any> {\n readonly data = input<readonly T[] | null | undefined>([]);\n /** The part's name. Rows sharing a name are summed into one slice. */\n readonly category = input.required<SdsAccessor<T, string | null | undefined>>();\n /** The part's size (negative and missing values are ignored). */\n readonly value = input.required<SdsAccessor<T, number | null | undefined>>();\n /** Optional per-row colour (any CSS colour) — e.g. a status palette. */\n readonly color = input<SdsAccessor<T, string | null | undefined> | null>(null);\n\n readonly heading = input<string>('');\n readonly subtitle = input<string>('');\n readonly variant = input<SdsDonutVariant>('donut');\n /** Draw a half-donut (a gauge-like arc) instead of a full circle. */\n readonly half = input(false, { transform: booleanAttribute });\n /** Diameter cap in px (the chart also shrinks to its container). */\n readonly height = input(240, { transform: numberAttribute });\n /** Ring thickness in px. Defaults to ~26 % of the radius. */\n readonly thickness = input<number | null, unknown>(null, { transform: numberOrNull });\n /** Beyond this many slices the smallest fold into one \"Other\" slice. */\n readonly maxSlices = input(6, { transform: numberAttribute });\n /** Name of the folded tail slice. Default (`null`): the configured `labels.other` (\"Other\"). */\n readonly otherLabel = input<string | null>(null);\n /** `desc` (default) orders slices largest first; `none` keeps the data order. */\n readonly sort = input<SdsDonutSort>('desc');\n /** `auto` = right of the ring (below it on narrow containers). */\n readonly legend = input<SdsChartLegend>('auto');\n readonly legendValue = input<SdsDonutLegendValue>('percent');\n /**\n * Headline in the hole. Default (`null`): the configured `labels.total` (\"Total\"). An empty string\n * `''` hides the centre readout entirely (label and figure — what `null` did before 0.0.67), and the\n * hover tooltip takes over.\n */\n readonly centerLabel = input<string | null>(null);\n /** Override the centre figure (e.g. \"72 %\" for a completion donut). */\n readonly centerValue = input<string | null>(null);\n readonly valueFormat = input<SdsNumberFormat | null>(null);\n readonly locale = input<string | null>(null);\n\n readonly tooltip = input(true, { transform: booleanAttribute });\n readonly animate = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n /** Empty-state text. Default (`null`): the configured `labels.empty` (\"No data to display\"). */\n readonly emptyText = input<string | null>(null);\n readonly tableToggle = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n /** Hidden slice keys (category names, or the \"Other\" slice). Two-way bindable. */\n readonly hidden = model<readonly string[]>([]);\n\n readonly pointClick = output<SdsChartPointEvent<T>>();\n\n protected readonly customTooltip = contentChild(SdsChartTooltip);\n protected readonly focus = signal<string | null>(null);\n protected readonly active = signal<string | null>(null);\n protected readonly keyboard = signal(false);\n\n /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */\n protected onBlur(): void {\n if (this.keyboard()) this.active.set(null);\n this.keyboard.set(false);\n }\n protected readonly pointer = signal({ x: 0, y: 0 });\n\n private readonly width = hostWidth();\n private readonly loc = chartLocale(() => this.locale());\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n protected readonly text = chartLabels();\n private readonly animates = chartAnimates(() => this.animate());\n private readonly palette = chartPalette();\n\n private readonly fmt = computed(() => valueFormatter(this.loc(), this.valueFormat()));\n private readonly pct = computed(() => valueFormatter(this.loc(), PERCENT_VALUE));\n\n /** Slices after grouping, sorting and folding the tail into \"Other\". */\n private readonly slices = computed<Slice<T>[]>(() => {\n const data = this.data() ?? [];\n const cAcc = this.category();\n const vAcc = this.value();\n const colAcc = this.color();\n const byKey = new Map<string, Slice<T>>();\n data.forEach((row, i) => {\n const label = String(access(cAcc, row, i) ?? '—');\n const v = num(access(vAcc, row, i));\n if (v === null || v < 0) return;\n let s = byKey.get(label);\n if (!s) {\n const custom = colAcc ? access(colAcc, row, i) : null;\n s = { key: label, label, value: 0, color: custom || '', rows: [], index: byKey.size, other: false };\n byKey.set(label, s);\n }\n s.value += v;\n s.rows.push(row);\n });\n let list = [...byKey.values()].filter((s) => s.value > 0);\n const assign = (kept: Slice<T>[]) => {\n // Slot = position among the slices actually drawn, in DATA order (never by size) — so a slice\n // that appears 9th in the data still gets a hue, distinct from the gray \"Other\".\n let slot = 0;\n for (const s of [...kept].sort((a, b) => a.index - b.index)) if (!s.color) s.color = slotColor(slot++, this.palette);\n for (const s of kept) if (!s.color) s.color = slotColor(slot++, this.palette);\n };\n if (this.sort() === 'desc') list.sort((a, b) => b.value - a.value);\n const max = Math.max(2, this.maxSlices());\n if (list.length > max) {\n const ranked = [...list].sort((a, b) => b.value - a.value);\n const keep = new Set(ranked.slice(0, max - 1).map((s) => s.key));\n const tail = list.filter((s) => !keep.has(s.key));\n list = list.filter((s) => keep.has(s.key));\n assign(list);\n list.push({\n key: OTHER_KEY,\n label: `${this.otherLabel() ?? this.text().other} (${tail.length})`,\n value: tail.reduce((sum, s) => sum + s.value, 0),\n color: 'var(--color-ink-faint)',\n rows: tail.flatMap((s) => s.rows),\n index: -1,\n other: true,\n });\n }\n assign(list.filter((s) => !s.other));\n return list;\n });\n\n private readonly visible = computed(() => {\n const hidden = new Set(this.hidden());\n return this.slices().filter((s) => !hidden.has(s.key));\n });\n\n private readonly total = computed(() => this.visible().reduce((s, x) => s + x.value, 0));\n\n protected readonly isEmpty = computed(() => this.slices().length === 0);\n\n protected readonly size = computed(() => {\n const w = this.width() || this.height();\n return Math.max(120, Math.min(this.height(), w));\n });\n\n protected readonly boxHeight = computed(() => (this.half() ? Math.round(this.size() / 2 + 18) : this.size()));\n\n protected readonly showCenter = computed(() => this.variant() === 'donut' && this.centerLabel() !== '');\n protected readonly showTooltip = computed(() => this.tooltip() && (!this.showCenter() || !!this.customTooltip()));\n\n protected readonly geo = computed(() => {\n if (this.width() <= 0 || this.isEmpty()) return null;\n const size = this.size();\n const half = this.half();\n const outer = (half ? size / 2 : size / 2) - 6;\n const ring = this.variant() === 'pie' ? outer : Math.min(outer - 8, this.thickness() ?? Math.max(12, outer * 0.26));\n const inner = this.variant() === 'pie' ? 0 : outer - ring;\n const cy = half ? this.boxHeight() - 12 : size / 2;\n const valueSize = Math.max(14, Math.min(30, inner * 0.36));\n const labelSize = Math.max(10, Math.min(13, inner * 0.16));\n return {\n cx: size / 2,\n cy,\n outer,\n inner,\n start: half ? -Math.PI / 2 : 0,\n end: half ? Math.PI / 2 : Math.PI * 2,\n valueSize,\n labelSize,\n labelY: half ? -valueSize - 6 : -valueSize * 0.55,\n valueY: half ? -4 : valueSize * 0.45,\n subY: half ? labelSize + 4 : valueSize * 0.45 + labelSize + 6,\n };\n });\n\n private readonly target = computed<Geometry>(() => {\n const G = this.geo();\n const out = new Map<string, readonly number[]>();\n if (!G) return out;\n const arcs = d3pie<Slice<T>>()\n .value((s) => s.value)\n .sort(null)\n .startAngle(G.start)\n .endAngle(G.end)(this.visible());\n for (const a of arcs) out.set(a.data.key, [a.startAngle, a.endAngle]);\n return out;\n });\n\n /** Boolean, so a resize (width A → B) never counts as a data change: resizes snap, data animates. */\n private readonly ready = computed(() => this.width() > 0);\n private readonly version = computed(() => {\n this.data();\n this.hidden();\n this.half();\n return this.ready() ? {} : null;\n });\n\n private readonly tween = createTween({\n target: () => this.target(),\n version: () => this.version(),\n enabled: () => this.animates(),\n // The entrance sweeps every slice out from the start angle; a slice shown later grows in place.\n enter: (_k, to, initial) => {\n const start = this.geo()?.start ?? 0;\n return initial ? [start, start] : [to[0], to[0]];\n },\n });\n\n protected readonly arcs = computed(() => {\n const G = this.geo();\n if (!G) return [];\n const geo = this.tween();\n const GAP = 2;\n const gen = d3arc<{ startAngle: number; endAngle: number }>()\n .innerRadius(G.inner)\n .outerRadius(G.outer)\n .cornerRadius(this.variant() === 'pie' ? 2 : 3)\n .padAngle(GAP / G.outer)\n .padRadius(G.outer);\n const act = this.active();\n const focus = this.focus();\n return this.visible().map((s) => {\n const g = geo.get(s.key) ?? [G.start, G.start];\n const mid = (g[0] + g[1]) / 2;\n const pop = act === s.key ? 5 : 0;\n return {\n key: s.key,\n color: s.color,\n d: gen({ startAngle: g[0], endAngle: g[1] }) ?? '',\n shift: pop ? `translate(${Math.sin(mid) * pop},${-Math.cos(mid) * pop})` : null,\n dim: (!!focus && focus !== s.key) || (!!act && act !== s.key),\n };\n });\n });\n\n protected readonly center = computed(() => {\n const key = this.active() ?? this.focus();\n const s = key ? this.visible().find((x) => x.key === key) : null;\n const total = this.total();\n if (s) {\n return {\n label: fitText(s.label, (this.geo()?.inner ?? 60) * 1.5, this.geo()?.labelSize ?? 12, 500),\n value: this.fmt()(s.value),\n sub: total ? this.pct()(s.value / total) : '',\n };\n }\n return { label: this.centerLabel() ?? this.text().total, value: this.centerValue() ?? this.fmt()(total), sub: '' };\n });\n\n protected readonly tooltipCtx = computed<SdsChartTooltipContext<T> | null>(() => {\n const key = this.active();\n const s = key ? this.visible().find((x) => x.key === key) : null;\n if (!s) return null;\n const total = this.total();\n return {\n title: s.label,\n rows: [{ key: s.key, label: total ? this.pct()(s.value / total) : '', value: this.fmt()(s.value), raw: s.value, color: s.color, shape: 'rect' }],\n data: s.rows,\n index: s.index,\n };\n });\n\n /** Spoken readout — from the full label (the centre one is truncated to fit the hole). */\n protected readonly liveText = computed(() => {\n if (!this.keyboard()) return '';\n const s = this.visible().find((x) => x.key === this.active());\n if (!s) return '';\n const total = this.total();\n return `${this.text().labelValue(s.label, this.fmt()(s.value))}${total ? `, ${this.pct()(s.value / total)}` : ''}`;\n });\n\n protected readonly legendPosition = computed(() => (this.legend() === 'auto' ? 'right' : this.legend()) as 'top' | 'bottom' | 'right' | 'none');\n\n protected hover(key: string, event: PointerEvent): void {\n this.keyboard.set(false);\n this.active.set(key);\n this.track(event);\n }\n\n protected track(event: PointerEvent): void {\n const svg = (event.currentTarget as SVGElement).ownerSVGElement;\n const rect = svg?.getBoundingClientRect();\n if (!rect) return;\n this.pointer.set({ x: event.clientX - rect.left, y: event.clientY - rect.top });\n }\n\n protected emit(key: string): void {\n const s = this.visible().find((x) => x.key === key);\n if (!s) return;\n this.pointClick.emit({ key: s.other ? OTHER_KEY : s.key, row: s.rows.length === 1 ? s.rows[0] : null, index: s.index, value: s.value });\n }\n\n protected onKey(event: KeyboardEvent): void {\n const vis = this.visible();\n if (!vis.length) return;\n const pos = vis.findIndex((s) => s.key === this.active());\n let next = pos;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = pos < 0 ? 0 : (pos + 1) % vis.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = pos < 0 ? vis.length - 1 : (pos - 1 + vis.length) % vis.length;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = vis.length - 1;\n break;\n case 'Escape':\n this.active.set(null);\n return;\n case 'Enter':\n case ' ':\n if (pos >= 0) {\n event.preventDefault();\n this.emit(vis[pos].key);\n }\n return;\n default:\n return;\n }\n event.preventDefault();\n this.keyboard.set(true);\n this.active.set(vis[next].key);\n const G = this.geo();\n const g = this.target().get(vis[next].key);\n if (G && g) {\n const mid = (g[0] + g[1]) / 2;\n const r = (G.inner + G.outer) / 2;\n this.pointer.set({ x: G.cx + Math.sin(mid) * r, y: G.cy - Math.cos(mid) * r });\n }\n }\n\n protected toggleSlice(key: string): void {\n const hidden = new Set(this.hidden());\n if (hidden.has(key)) hidden.delete(key);\n else if (this.visible().length > 1) hidden.add(key);\n this.hidden.set([...hidden]);\n this.active.set(null);\n }\n\n protected readonly legendItems = computed<LegendItem[]>(() => {\n const mode = this.legendValue();\n const total = this.total();\n const hidden = new Set(this.hidden());\n return this.slices().map((s) => {\n const share = total && !hidden.has(s.key) ? this.pct()(s.value / total) : '';\n const value = this.fmt()(s.value);\n const detail = mode === 'none' ? undefined : mode === 'percent' ? share : mode === 'value' ? value : share ? `${value} · ${share}` : value;\n return { key: s.key, label: s.label, color: s.color, shape: 'rect', detail };\n });\n });\n\n protected readonly label = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel()!;\n return [this.heading() || this.text().donutChart, this.text().sliceCount(this.slices().length), this.text().totalOf(this.fmt()(this.total()))].join(' — ');\n });\n\n protected readonly table = computed<ChartTable>(() => {\n const total = this.total();\n return {\n columns: [this.text().category, this.text().value, this.text().share],\n rows: this.visible().map((s) => [s.label, this.fmt()(s.value), total ? this.pct()(s.value / total) : '—']),\n };\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { scaleBand } from 'd3-scale';\nimport { SdsAccessor, SdsChartPointEvent, SdsChartTooltipContext, SdsNumberFormat, SdsXFormat, SdsXValue } from './chart-types';\nimport {\n access,\n axisFormatter,\n chartAnimates,\n chartLabels,\n chartLocale,\n DIV_MID,\n DIV_NEG,\n DIV_POS,\n fitText,\n hostWidth,\n INK_HI,\n INK_LO,\n mix,\n num,\n numberOrNull,\n SEQ_0,\n SEQ_1,\n textWidth,\n toX,\n valueFormatter,\n xFormatter,\n xKey,\n} from './chart-core';\nimport { ChartTable, SdsChartFrame, SdsChartTooltipBox, thinOrTruncate } from './chart-parts';\nimport { SdsChartTooltip } from './sds-chart-tooltip';\n\n/** `sequential` = magnitude (one hue, pale → strong); `diverging` = polarity around a midpoint. */\nexport type SdsHeatmapScheme = 'sequential' | 'diverging';\n\ninterface Cell<T> {\n row: T | null;\n index: number;\n xi: number;\n yi: number;\n value: number | null;\n}\n\nconst GAP = 2;\n\n/**\n * Heatmap — a matrix of two categorical dimensions coloured by a measure: weekday × hour, service ×\n * month, product × region. Sequential (one hue, light → dark) or diverging (two opposite hues around\n * a neutral gray midpoint) colour, mixed by the browser in OKLab from theme tokens so it re-themes and\n * flips to dark mode on its own. Values print inside cells only where they fit, missing cells read\n * as empty (not as zero), arrow keys move cell by cell, and a scale legend states the range.\n *\n * @example\n * <sds-heatmap [data]=\"rows\" x=\"heure\" y=\"jour\" value=\"arrivees\" heading=\"Arrivées aux urgences\" />\n */\n@Component({\n selector: 'sds-heatmap',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsChartFrame, SdsChartTooltipBox],\n host: { class: 'block' },\n template: `\n <sds-chart-frame\n [heading]=\"heading()\"\n [subtitle]=\"subtitle()\"\n legend=\"none\"\n [loading]=\"loading()\"\n [empty]=\"isEmpty()\"\n [emptyText]=\"emptyText()\"\n [height]=\"resolvedHeight()\"\n [table]=\"table()\"\n [tableCaption]=\"label()\"\n [tableToggle]=\"tableToggle()\"\n >\n <div\n class=\"relative rounded-control outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n [style.height.px]=\"resolvedHeight()\"\n tabindex=\"0\"\n role=\"group\"\n [attr.aria-roledescription]=\"text().heatmapRole\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onKey($event)\"\n (blur)=\"onBlur()\"\n >\n @if (layout(); as L) {\n <svg class=\"block overflow-visible\" style=\"width: 100%; height: 100%\" [attr.viewBox]=\"'0 0 ' + L.width + ' ' + L.height\" aria-hidden=\"true\">\n <g class=\"fill-ink-faint\" style=\"font-size: 11px\">\n @for (t of L.yTicks; track $index) {\n <text [attr.x]=\"L.plot.left - 8\" [attr.y]=\"t.pos\" text-anchor=\"end\" dominant-baseline=\"central\">{{ t.label }}</text>\n }\n @for (t of L.xTicks; track $index) {\n <text [attr.x]=\"t.pos\" [attr.y]=\"L.plot.top + L.plot.height + 16\" text-anchor=\"middle\">{{ t.label }}</text>\n }\n @if (yLabel()) {\n <text\n class=\"fill-ink-soft\"\n [attr.transform]=\"'translate(11,' + (L.plot.top + L.plot.height / 2) + ') rotate(-90)'\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n style=\"font-weight: 500\"\n >{{ yLabel() }}</text>\n }\n @if (xLabel()) {\n <text class=\"fill-ink-soft\" [attr.x]=\"L.plot.left + L.plot.width / 2\" [attr.y]=\"L.plot.top + L.plot.height + 36\" text-anchor=\"middle\" style=\"font-weight: 500\">{{ xLabel() }}</text>\n }\n </g>\n @for (c of cells(); track c.id) {\n <rect\n [attr.x]=\"c.x\"\n [attr.y]=\"c.y\"\n [attr.width]=\"c.w\"\n [attr.height]=\"c.h\"\n [attr.rx]=\"radius()\"\n [style.fill]=\"c.fill\"\n [attr.stroke]=\"c.missing ? 'var(--color-ink-faint)' : null\"\n [attr.stroke-dasharray]=\"c.missing ? '3 3' : null\"\n stroke-width=\"1\"\n class=\"heat-cell\"\n [class.heat-anim]=\"animates()\"\n (pointerenter)=\"hover(c.i, $event)\"\n (pointerleave)=\"active.set(null)\"\n (click)=\"emit(c.i)\"\n />\n @if (c.text) {\n <text\n [attr.x]=\"c.x + c.w / 2\"\n [attr.y]=\"c.y + c.h / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n [style.fill]=\"c.ink\"\n style=\"font-size: 11px; font-weight: 500; font-variant-numeric: tabular-nums; pointer-events: none\"\n >{{ c.text }}</text>\n }\n }\n @if (activeCell(); as a) {\n <rect [attr.x]=\"a.x - 1\" [attr.y]=\"a.y - 1\" [attr.width]=\"a.w + 2\" [attr.height]=\"a.h + 2\" [attr.rx]=\"radius() + 1\" fill=\"none\" class=\"stroke-ink\" stroke-width=\"2\" style=\"pointer-events: none\" />\n }\n </svg>\n @if (tooltip()) {\n <sds-chart-tooltip-box\n [ctx]=\"tooltipCtx()\"\n [template]=\"customTooltip()?.template ?? null\"\n [x]=\"(activeCell()?.x ?? 0) + (activeCell()?.w ?? 0)\"\n [y]=\"(activeCell()?.y ?? 0) + (activeCell()?.h ?? 0) / 2\"\n [containerWidth]=\"L.width\"\n [containerHeight]=\"L.height\"\n />\n }\n }\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">{{ liveText() }}</div>\n </div>\n @if (scaleLegend() && layout(); as L) {\n <div class=\"mt-3 flex items-center gap-2 text-[11px] text-ink-faint tabular-nums\" [style.padding-left.px]=\"L.plot.left\">\n <span>{{ scale().minLabel }}</span>\n <span class=\"h-2 w-40 max-w-[50%] rounded-full\" [style.background]=\"scale().gradient\"></span>\n <span>{{ scale().maxLabel }}</span>\n @if (scheme() === 'diverging') {\n <span class=\"ml-2\">centre · {{ scale().midLabel }}</span>\n }\n </div>\n }\n </sds-chart-frame>\n `,\n styles: `\n .heat-cell {\n cursor: pointer;\n }\n .heat-anim {\n transition: fill 300ms ease;\n }\n @media (prefers-reduced-motion: reduce) {\n .heat-anim {\n transition: none;\n }\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n }\n `,\n})\nexport class SdsHeatmap<T = any> {\n readonly data = input<readonly T[] | null | undefined>([]);\n /** Column dimension. */\n readonly x = input.required<SdsAccessor<T, SdsXValue>>();\n /** Row dimension. */\n readonly y = input.required<SdsAccessor<T, SdsXValue>>();\n /** The measure colouring each cell. Rows sharing an (x, y) pair are summed. */\n readonly value = input.required<SdsAccessor<T, number | null | undefined>>();\n /** Fix column order (default: first appearance). */\n readonly xOrder = input<readonly SdsXValue[] | null>(null);\n /** Fix row order (default: first appearance). */\n readonly yOrder = input<readonly SdsXValue[] | null>(null);\n\n readonly heading = input<string>('');\n readonly subtitle = input<string>('');\n readonly scheme = input<SdsHeatmapScheme>('sequential');\n /** Fix the colour domain instead of the data extent. */\n readonly domain = input<readonly [number, number] | null>(null);\n /** The diverging scheme's neutral value. */\n readonly midpoint = input(0, { transform: numberAttribute });\n /** Height in px. Defaults to `cellHeight` per row. */\n readonly height = input<number | null, unknown>(null, { transform: numberOrNull });\n readonly cellHeight = input(30, { transform: numberAttribute });\n readonly radius = input(3, { transform: numberAttribute });\n /** Print each value inside its cell — only when every value fits (never a partial matrix). */\n readonly showValues = input(false, { transform: booleanAttribute });\n /** Show the colour-scale legend under the matrix. */\n readonly scaleLegend = input(true, { transform: booleanAttribute });\n readonly valueFormat = input<SdsNumberFormat | null>(null);\n /** Format of the column / row labels (a function; dates default to their day). */\n readonly xFormat = input<SdsXFormat | null>(null);\n /** Name of the measure in the tooltip (e.g. \"Arrivals\"). Default (`null`): `labels.value`. */\n readonly valueLabel = input<string | null>(null);\n /** Column-axis title, drawn under the matrix. */\n readonly xLabel = input<string>('');\n /** Row-axis title, drawn vertically on the left (and the table's first column header). */\n readonly yLabel = input<string>('');\n readonly locale = input<string | null>(null);\n\n readonly tooltip = input(true, { transform: booleanAttribute });\n /** Cross-fade cell colours when the data changes. */\n readonly animate = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n /** Empty-state text. Default (`null`): the configured `labels.empty` (\"No data to display\"). */\n readonly emptyText = input<string | null>(null);\n readonly tableToggle = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n\n readonly pointClick = output<SdsChartPointEvent<T>>();\n\n protected readonly customTooltip = contentChild(SdsChartTooltip);\n protected readonly active = signal<number | null>(null);\n protected readonly keyboard = signal(false);\n\n /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */\n protected onBlur(): void {\n if (this.keyboard()) this.active.set(null);\n this.keyboard.set(false);\n }\n\n private readonly width = hostWidth();\n private readonly loc = chartLocale(() => this.locale());\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n protected readonly text = chartLabels();\n protected readonly animates = chartAnimates(() => this.animate());\n private readonly fmt = computed(() => valueFormatter(this.loc(), this.valueFormat()));\n\n private readonly matrix = computed(() => {\n const data = this.data() ?? [];\n const xAcc = this.x();\n const yAcc = this.y();\n const vAcc = this.value();\n const xs: SdsXValue[] = (this.xOrder() ?? []).map((v) => toX(v)!).filter((v) => v !== null);\n const ys: SdsXValue[] = (this.yOrder() ?? []).map((v) => toX(v)!).filter((v) => v !== null);\n const xIndex = new Map(xs.map((v, i) => [xKey(v), i]));\n const yIndex = new Map(ys.map((v, i) => [xKey(v), i]));\n const sums = new Map<string, Cell<T>>();\n data.forEach((row, index) => {\n const xv = toX(access(xAcc, row, index));\n const yv = toX(access(yAcc, row, index));\n if (xv === null || yv === null) return;\n let xi = xIndex.get(xKey(xv));\n if (xi === undefined) {\n xi = xs.push(xv) - 1;\n xIndex.set(xKey(xv), xi);\n }\n let yi = yIndex.get(xKey(yv));\n if (yi === undefined) {\n yi = ys.push(yv) - 1;\n yIndex.set(xKey(yv), yi);\n }\n const v = num(access(vAcc, row, index));\n const k = `${xi}:${yi}`;\n const cell = sums.get(k);\n if (cell) {\n cell.value = v === null ? cell.value : (cell.value ?? 0) + v;\n cell.row = null; // aggregated\n } else sums.set(k, { row, index, xi, yi, value: v });\n });\n const cells: Cell<T>[] = [];\n for (let yi = 0; yi < ys.length; yi++) {\n for (let xi = 0; xi < xs.length; xi++) cells.push(sums.get(`${xi}:${yi}`) ?? { row: null, index: -1, xi, yi, value: null });\n }\n return { xs, ys, cells };\n });\n\n protected readonly isEmpty = computed(() => !this.matrix().cells.some((c) => c.value !== null));\n\n private readonly fmtX = computed(() => xFormatter('category', this.loc(), this.xFormat(), 0));\n\n /** Colour domain; the diverging arms are made symmetric so equal distances read as equal. */\n protected readonly scale = computed(() => {\n const vals = this.matrix().cells.map((c) => c.value).filter((v): v is number => v !== null);\n const fixed = this.domain();\n let lo = fixed?.[0] ?? Math.min(...vals);\n let hi = fixed?.[1] ?? Math.max(...vals);\n if (!Number.isFinite(lo)) {\n lo = 0;\n hi = 1;\n }\n const mid = this.midpoint();\n if (this.scheme() === 'diverging' && !fixed) {\n const arm = Math.max(Math.abs(lo - mid), Math.abs(hi - mid)) || 1;\n lo = mid - arm;\n hi = mid + arm;\n }\n if (lo === hi) hi = lo + 1;\n const fa = axisFormatter(this.loc(), null, this.valueFormat());\n const gradient =\n this.scheme() === 'diverging'\n ? `linear-gradient(to right in oklab, ${DIV_NEG}, ${DIV_MID}, ${DIV_POS})`\n : `linear-gradient(to right in oklab, ${SEQ_0}, ${SEQ_1})`;\n return { lo, hi, mid, minLabel: fa(lo), maxLabel: fa(hi), midLabel: fa(mid), gradient };\n });\n\n /** Signed position on the scale: 0…1 sequential, −1…1 diverging. */\n private position(v: number): number {\n const { lo, hi, mid } = this.scale();\n if (this.scheme() === 'diverging') {\n return v >= mid ? Math.min(1, (v - mid) / (hi - mid || 1)) : -Math.min(1, (mid - v) / (mid - lo || 1));\n }\n return Math.max(0, Math.min(1, (v - lo) / (hi - lo)));\n }\n\n /**\n * Where a cell label switches to the strong-end ink — measured, not guessed: the point where the\n * strong ink starts to out-contrast the pale one, per ramp, in both modes.\n */\n private strongEnd(t: number): boolean {\n if (this.scheme() !== 'diverging') return t > 0.56;\n return t < 0 ? -t > 0.82 : t > 0.74;\n }\n\n protected readonly resolvedHeight = computed(() => {\n const h = this.height();\n if (h !== null && h > 0) return h;\n return Math.max(80, this.matrix().ys.length * this.cellHeight() + 30 + (this.xLabel() ? 18 : 0));\n });\n\n protected readonly layout = computed(() => {\n const W = this.width();\n const H = this.resolvedHeight();\n if (W <= 0 || this.isEmpty()) return null;\n const { xs, ys } = this.matrix();\n const fx = this.fmtX();\n const yLabels = ys.map((v) => fx(v));\n const maxLeft = Math.min(180, W * 0.3);\n const titleW = this.yLabel() ? 18 : 0;\n const left = Math.ceil(Math.min(maxLeft, Math.max(0, ...yLabels.map((l) => textWidth(l))))) + 12 + titleW;\n const bottom = 24 + (this.xLabel() ? 18 : 0);\n const plot = { left, top: 2, width: Math.max(10, W - left - 4), height: Math.max(20, H - 2 - bottom) };\n const bx = scaleBand<number>().domain(xs.map((_, i) => i)).range([plot.left, plot.left + plot.width]);\n const by = scaleBand<number>().domain(ys.map((_, i) => i)).range([plot.top, plot.top + plot.height]);\n const xTicks = thinOrTruncate(\n xs.map((v, i) => ({ pos: (bx(i) ?? 0) + bx.step() / 2, label: fx(v) })),\n bx.step(),\n );\n const yTicks = ys.map((_, i) => ({ pos: (by(i) ?? 0) + by.step() / 2, label: fitText(yLabels[i], left - 12 - titleW) }));\n return { width: W, height: H, plot, bx, by, xTicks, yTicks };\n });\n\n protected readonly cells = computed(() => {\n const L = this.layout();\n if (!L) return [];\n const { cells } = this.matrix();\n const fmt = this.fmt();\n const diverging = this.scheme() === 'diverging';\n const cw = Math.max(1, L.bx.step() - GAP);\n const ch = Math.max(1, L.by.step() - GAP);\n // All or nothing: a matrix with labels in some cells and not others reads as missing data.\n const labelsFit =\n this.showValues() &&\n ch >= 14 &&\n cells.every((c) => c.value === null || textWidth(fmt(c.value), 11, 500) + 6 <= cw);\n return cells.map((c, i) => {\n const x = (L.bx(c.xi) ?? 0) + GAP / 2;\n const y = (L.by(c.yi) ?? 0) + GAP / 2;\n if (c.value === null) {\n // Missing ≠ zero: an empty dashed cell, never the ramp's pale end.\n return { id: `${c.xi}:${c.yi}`, i, x, y, w: cw, h: ch, fill: 'transparent', text: '', ink: INK_LO, missing: true };\n }\n const t = this.position(c.value);\n const fill = diverging ? mix(DIV_MID, t < 0 ? DIV_NEG : DIV_POS, Math.abs(t)) : mix(SEQ_0, SEQ_1, t);\n const text = labelsFit ? fmt(c.value) : '';\n return { id: `${c.xi}:${c.yi}`, i, x, y, w: cw, h: ch, fill, text, ink: this.strongEnd(t) ? INK_HI : INK_LO, missing: false };\n });\n });\n\n protected readonly activeCell = computed(() => {\n const i = this.active();\n return i === null ? null : (this.cells()[i] ?? null);\n });\n\n protected readonly tooltipCtx = computed<SdsChartTooltipContext<T> | null>(() => {\n const i = this.active();\n if (i === null) return null;\n const { cells, xs, ys } = this.matrix();\n const c = cells[i];\n const vis = this.cells()[i];\n if (!c || !vis) return null;\n const fx = this.fmtX();\n return {\n title: `${fx(ys[c.yi])} · ${fx(xs[c.xi])}`,\n rows: [\n {\n key: 'value',\n label: this.valueLabel() ?? this.text().value,\n value: c.value === null ? this.text().noData : this.fmt()(c.value),\n raw: c.value,\n color: vis.fill,\n shape: 'rect',\n },\n ],\n data: c.row ? [c.row] : [],\n index: c.index,\n };\n });\n\n protected readonly liveText = computed(() => {\n if (!this.keyboard()) return '';\n const c = this.tooltipCtx();\n return c ? this.text().labelValue(c.title ?? '', c.rows[0].value) : '';\n });\n\n protected hover(i: number, _event: PointerEvent): void {\n this.keyboard.set(false);\n this.active.set(i);\n }\n\n protected emit(i: number): void {\n const { cells, xs } = this.matrix();\n const c = cells[i];\n if (!c) return;\n const { ys } = this.matrix();\n this.pointClick.emit({ key: `${xKey(xs[c.xi])}|${xKey(ys[c.yi])}`, row: c.row, index: c.index, value: c.value, x: xs[c.xi], y: ys[c.yi] });\n }\n\n /** Arrow keys move one cell in any direction. */\n protected onKey(event: KeyboardEvent): void {\n const { xs, ys } = this.matrix();\n if (!xs.length || !ys.length) return;\n const cur = this.active() ?? -1;\n let xi = cur < 0 ? 0 : cur % xs.length;\n let yi = cur < 0 ? 0 : Math.floor(cur / xs.length);\n switch (event.key) {\n case 'ArrowRight':\n if (cur >= 0) xi = Math.min(xs.length - 1, xi + 1);\n break;\n case 'ArrowLeft':\n if (cur >= 0) xi = Math.max(0, xi - 1);\n break;\n case 'ArrowDown':\n if (cur >= 0) yi = Math.min(ys.length - 1, yi + 1);\n break;\n case 'ArrowUp':\n if (cur >= 0) yi = Math.max(0, yi - 1);\n break;\n case 'Home':\n xi = 0;\n break;\n case 'End':\n xi = xs.length - 1;\n break;\n case 'Escape':\n this.active.set(null);\n return;\n case 'Enter':\n case ' ':\n if (cur >= 0) {\n event.preventDefault();\n this.emit(cur);\n }\n return;\n default:\n return;\n }\n event.preventDefault();\n this.keyboard.set(true);\n this.active.set(yi * xs.length + xi);\n }\n\n protected readonly label = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel()!;\n const { xs, ys } = this.matrix();\n return [this.heading() || this.text().heatmap, this.text().gridSize(ys.length, xs.length)].join(' — ');\n });\n\n protected readonly table = computed<ChartTable>(() => {\n const { xs, ys, cells } = this.matrix();\n const fx = this.fmtX();\n const fmt = this.fmt();\n return {\n columns: [this.yLabel() || '', ...xs.map((v) => fx(v))],\n rows: ys.map((yv, yi) => [\n fx(yv),\n ...xs.map((_, xi) => {\n const v = cells[yi * xs.length + xi]?.value ?? null;\n return v === null ? '—' : fmt(v);\n }),\n ]),\n };\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { hierarchy, HierarchyRectangularNode, treemap, treemapSquarify } from 'd3-hierarchy';\nimport { SdsChartLegend, SdsChartPointEvent, SdsChartTooltipContext, SdsChartTooltipRow, SdsNumberFormat } from './chart-types';\nimport {\n chartAnimates,\n chartLabels,\n chartLocale,\n chartPalette,\n createTween,\n fitText,\n Geometry,\n hostWidth,\n PERCENT_VALUE,\n slotColor,\n textWidth,\n valueFormatter,\n} from './chart-core';\nimport { ChartTable, LegendItem, SdsChartFrame, SdsChartTooltipBox } from './chart-parts';\nimport { SdsChartTooltip } from './sds-chart-tooltip';\nimport { SdsIcon } from '@besaitech/ng-design-system';\n\n/** A treemap node: a leaf carries `value`; a branch carries `children` (its value is their sum). */\nexport interface SdsTreemapNode {\n name: string;\n value?: number | null;\n children?: readonly SdsTreemapNode[];\n /** Override the colour of this node's whole branch (top-level nodes) or of one leaf. */\n color?: string;\n /** Label ink for a custom `color` (defaults to white). */\n ink?: string;\n}\n// Extra fields on your own node type are kept: `pointClick` and the custom tooltip hand the node back.\n\ninterface Tile {\n /** Unique, zoom-stable identity: data indices from the root (\"0/2\"), never names (they can repeat). */\n key: string;\n /** Readable path from the root (\"Personnel › Médecins\"). */\n path: string;\n /** Data index of the top-level branch (its colour slot). */\n branch: number;\n node: HierarchyRectangularNode<SdsTreemapNode>;\n}\n\nconst PATH_SEP = ' › ';\n\n/**\n * Treemap for part-to-whole across many items or a hierarchy — budget lines, stock by family, stays\n * by service and unit. Squarified tiles sized by value, coloured by their top-level branch,\n * separated by surface gaps (wider between branches), labelled only where the name fits, with a\n * breadcrumb drill-down: click a branch to zoom into it, the breadcrumb to come back. Leaf clicks\n * emit `pointClick`.\n *\n * @example\n * <sds-treemap heading=\"Budget 2026\" [data]=\"[{ name: 'Personnel', children: [{ name: 'Soins', value: 48 }] }]\" />\n */\n@Component({\n selector: 'sds-treemap',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsChartFrame, SdsChartTooltipBox, SdsIcon],\n host: { class: 'block' },\n template: `\n <sds-chart-frame\n [heading]=\"heading()\"\n [subtitle]=\"subtitle()\"\n [items]=\"legendItems()\"\n [legend]=\"legendPosition()\"\n [interactive]=\"false\"\n [loading]=\"loading()\"\n [empty]=\"isEmpty()\"\n [emptyText]=\"emptyText()\"\n [height]=\"height()\"\n [table]=\"table()\"\n [tableCaption]=\"label()\"\n [tableToggle]=\"tableToggle()\"\n >\n @if (drilldown() && zoom().names.length) {\n <nav class=\"mb-2 flex flex-wrap items-center gap-1 text-xs\" [attr.aria-label]=\"text().breadcrumb\">\n <button type=\"button\" class=\"rounded px-1.5 py-0.5 font-medium text-ink-soft underline-offset-2 hover:bg-muted hover:text-ink hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500\" (click)=\"zoomTo(0)\">\n {{ rootName() }}\n </button>\n @for (p of zoom().names; track $index) {\n <sds-icon name=\"chevron-right\" [size]=\"12\" class=\"text-ink-faint\" />\n @if ($last) {\n <span class=\"px-1.5 py-0.5 font-medium text-ink\" aria-current=\"page\">{{ p }}</span>\n } @else {\n <button type=\"button\" class=\"rounded px-1.5 py-0.5 font-medium text-ink-soft underline-offset-2 hover:bg-muted hover:text-ink hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500\" (click)=\"zoomTo($index + 1)\">{{ p }}</button>\n }\n }\n </nav>\n }\n <div\n class=\"relative rounded-control outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n [style.height.px]=\"height()\"\n tabindex=\"0\"\n role=\"group\"\n [attr.aria-roledescription]=\"text().chartRole\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onKey($event)\"\n (blur)=\"onBlur()\"\n >\n @if (rects().length) {\n <svg class=\"block overflow-hidden\" style=\"width: 100%; height: 100%\" [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\" aria-hidden=\"true\">\n @for (r of rects(); track r.key) {\n <g\n class=\"cursor-pointer\"\n (pointerenter)=\"hover(r.key, $event)\"\n (pointermove)=\"track($event)\"\n (pointerleave)=\"active.set(null)\"\n (click)=\"activate(r.key)\"\n >\n <rect\n [attr.x]=\"r.x\"\n [attr.y]=\"r.y\"\n [attr.width]=\"r.w\"\n [attr.height]=\"r.h\"\n [attr.rx]=\"r.w > 8 && r.h > 8 ? 4 : 1\"\n [style.fill]=\"r.color\"\n class=\"transition-[filter] duration-150\"\n [style.filter]=\"active() === r.key ? 'brightness(1.12)' : null\"\n />\n @if (r.name) {\n <text [attr.x]=\"r.x + 8\" [attr.y]=\"r.y + 17\" [style.fill]=\"r.ink\" style=\"font-size: 12px; font-weight: 600; pointer-events: none\">{{ r.name }}</text>\n }\n @if (r.value) {\n <text [attr.x]=\"r.x + 8\" [attr.y]=\"r.y + 32\" [style.fill]=\"r.ink\" style=\"font-size: 11px; opacity: 0.85; font-variant-numeric: tabular-nums; pointer-events: none\">{{ r.value }}</text>\n }\n </g>\n }\n @if (activeRect(); as a) {\n <rect [attr.x]=\"a.x + 1\" [attr.y]=\"a.y + 1\" [attr.width]=\"a.w - 2\" [attr.height]=\"a.h - 2\" rx=\"4\" fill=\"none\" stroke=\"var(--color-surface)\" stroke-width=\"2\" style=\"pointer-events: none\" />\n }\n </svg>\n @if (tooltip()) {\n <sds-chart-tooltip-box\n [ctx]=\"tooltipCtx()\"\n [template]=\"customTooltip()?.template ?? null\"\n [x]=\"pointer().x\"\n [y]=\"pointer().y\"\n [containerWidth]=\"width()\"\n [containerHeight]=\"height()\"\n />\n }\n }\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">{{ liveText() }}</div>\n </div>\n </sds-chart-frame>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n }\n `,\n})\nexport class SdsTreemap {\n readonly data = input<readonly SdsTreemapNode[] | null | undefined>([]);\n readonly heading = input<string>('');\n readonly subtitle = input<string>('');\n readonly height = input(320, { transform: numberAttribute });\n readonly valueFormat = input<SdsNumberFormat | null>(null);\n /** Click a branch to zoom into it (with a breadcrumb back). */\n readonly drilldown = input(true, { transform: booleanAttribute });\n /** Name of the top of the breadcrumb. */\n /** Default (`null`): the configured `labels.all` (\"All\"). */\n readonly rootLabel = input<string | null>(null);\n protected readonly rootName = computed(() => this.rootLabel() ?? this.text().all);\n /** Print the value under the name inside tiles large enough. */\n readonly showValues = input(true, { transform: booleanAttribute });\n /** `auto` = the branch legend below the tiles when there are two or more branches. */\n readonly legend = input<SdsChartLegend>('auto');\n readonly locale = input<string | null>(null);\n\n readonly tooltip = input(true, { transform: booleanAttribute });\n readonly animate = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n /** Empty-state text. Default (`null`): the configured `labels.empty` (\"No data to display\"). */\n readonly emptyText = input<string | null>(null);\n readonly tableToggle = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n\n /** A leaf tile was clicked (branches zoom instead while `drilldown` is on). `key` is the path \"A › B\". */\n readonly pointClick = output<SdsChartPointEvent<SdsTreemapNode>>();\n\n protected readonly customTooltip = contentChild(SdsChartTooltip);\n /** Requested zoom: data indices from the root down to the zoomed branch. */\n private readonly path = signal<number[]>([]);\n protected readonly active = signal<string | null>(null);\n protected readonly keyboard = signal(false);\n private readonly announcement = signal('');\n protected readonly pointer = signal({ x: 0, y: 0 });\n\n protected readonly width = hostWidth();\n private readonly loc = chartLocale(() => this.locale());\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n protected readonly text = chartLabels();\n private readonly animates = chartAnimates(() => this.animate());\n private readonly palette = chartPalette();\n private readonly fmt = computed(() => valueFormatter(this.loc(), this.valueFormat()));\n private readonly pct = computed(() => valueFormatter(this.loc(), PERCENT_VALUE));\n\n /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */\n protected onBlur(): void {\n if (this.keyboard()) this.active.set(null);\n this.keyboard.set(false);\n }\n\n /** Full hierarchy, summed once. */\n private readonly root = computed(() => this.build({ name: this.rootName(), children: this.data() ?? [] }));\n\n private build(data: SdsTreemapNode) {\n return hierarchy<SdsTreemapNode>(data, (d) => d.children as SdsTreemapNode[] | undefined)\n .sum((d) => (d.children?.length ? 0 : Math.max(0, Number(d.value) || 0)))\n .sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n }\n\n protected readonly isEmpty = computed(() => !(this.root().value ?? 0));\n\n /**\n * The zoom that actually applies: the requested path walked against the CURRENT data, stopping at\n * the first index that no longer names a branch — so new data can never leave a stale zoom behind.\n */\n protected readonly zoom = computed(() => {\n let node: SdsTreemapNode = { name: this.rootName(), children: this.data() ?? [] };\n const indices: number[] = [];\n const names: string[] = [];\n for (const i of this.path()) {\n const next = node.children?.[i];\n if (!next?.children?.length) break;\n node = next;\n indices.push(i);\n names.push(next.name);\n }\n return { node, indices, names };\n });\n\n /** Branch colour + label ink per top-level data index (colour follows the entity, not its size). */\n private readonly branchStyle = computed(() =>\n (this.data() ?? []).map((n, i) => ({\n color: n.color ?? slotColor(i, this.palette),\n ink: n.ink ?? (n.color || this.palette ? '#ffffff' : i < 8 ? `var(--sds-chart-${i + 1}-ink, #ffffff)` : 'var(--color-ink)'),\n })),\n );\n\n /** The zoomed sub-tree, laid out at the current size. */\n private readonly layoutRoot = computed(() => {\n const W = this.width();\n const H = this.height();\n if (W <= 0 || this.isEmpty()) return null;\n return treemap<SdsTreemapNode>()\n .tile(treemapSquarify.ratio(1.2))\n .size([W, H])\n .round(true)\n .paddingInner((n) => (n.depth === 0 ? 4 : 2))(this.build(this.zoom().node));\n });\n\n private readonly tiles = computed<Tile[]>(() => {\n const r = this.layoutRoot();\n if (!r) return [];\n const { indices, names } = this.zoom();\n return r.leaves().map((node) => {\n const chain = node.ancestors().reverse().slice(1);\n // Index of each node in its parent's DATA children (hierarchy.sort reorders `children`).\n const idx = chain.map((a) => a.parent!.data.children!.indexOf(a.data));\n const full = [...indices, ...idx];\n return { key: full.join('/'), path: [...names, ...chain.map((a) => a.data.name)].join(PATH_SEP), branch: full[0] ?? 0, node };\n });\n });\n\n private readonly target = computed<Geometry>(() => {\n const out = new Map<string, readonly number[]>();\n for (const t of this.tiles()) out.set(t.key, [t.node.x0, t.node.y0, t.node.x1, t.node.y1]);\n return out;\n });\n\n private readonly ready = computed(() => this.width() > 0);\n private readonly version = computed(() => {\n this.data();\n this.zoom();\n return this.ready() ? {} : null;\n });\n\n private readonly geometry = createTween({\n target: () => this.target(),\n version: () => this.version(),\n enabled: () => this.animates(),\n // Tiles grow out of their own centre on entrance; leaves kept across a zoom glide to their new rect.\n enter: (_k, to) => {\n const cx = (to[0] + to[2]) / 2;\n const cy = (to[1] + to[3]) / 2;\n return [cx, cy, cx, cy];\n },\n });\n\n protected readonly rects = computed(() => {\n const geo = this.geometry();\n const styles = this.branchStyle();\n const showValues = this.showValues();\n const fmt = this.fmt();\n return this.tiles().map((t) => {\n const g = geo.get(t.key) ?? [t.node.x0, t.node.y0, t.node.x1, t.node.y1];\n const w = Math.max(0, g[2] - g[0]);\n const h = Math.max(0, g[3] - g[1]);\n const branch = styles[t.branch] ?? { color: slotColor(0), ink: '#ffffff' };\n const own = t.node.data.color;\n const nameFits = w >= 44 && h >= 24;\n const name = nameFits ? fitText(t.node.data.name, w - 16, 12, 600) : '';\n const value = showValues && name && h >= 40 ? fmt(t.node.value ?? 0) : '';\n return {\n key: t.key,\n x: g[0],\n y: g[1],\n w,\n h,\n color: own ?? branch.color,\n ink: own ? (t.node.data.ink ?? '#ffffff') : branch.ink,\n name: name.length > 1 ? name : '',\n value: value && textWidth(value, 11) <= w - 16 ? value : '',\n };\n });\n });\n\n protected readonly activeRect = computed(() => this.rects().find((r) => r.key === this.active()) ?? null);\n\n private readonly activeTile = computed(() => this.tiles().find((t) => t.key === this.active()) ?? null);\n\n protected readonly tooltipCtx = computed<SdsChartTooltipContext<SdsTreemapNode> | null>(() => {\n const t = this.activeTile();\n if (!t) return null;\n const total = this.root().value ?? 0;\n const parent = t.node.parent;\n const color = this.activeRect()?.color ?? slotColor(0);\n const v = t.node.value ?? 0;\n const rows: SdsChartTooltipRow[] = [{ key: 'value', label: this.text().value, value: this.fmt()(v), raw: v, color, shape: 'rect' }];\n if (total) rows.push({ key: 'share', label: this.text().shareOfTotal, value: this.pct()(v / total), raw: v / total, color, shape: 'rect' });\n if (parent && parent.depth > 0 && parent.value) {\n rows.push({ key: 'parent', label: this.text().shareOf(parent.data.name), value: this.pct()(v / parent.value), raw: v / parent.value, color, shape: 'rect' });\n }\n return { title: t.path, rows, data: [t.node.data], index: 0 };\n });\n\n protected readonly liveText = computed(() => {\n const c = this.keyboard() ? this.tooltipCtx() : null;\n return c ? this.text().labelValue(c.title ?? '', c.rows.map((r) => `${r.label} ${r.value}`).join(', ')) : this.announcement();\n });\n\n protected hover(key: string, event: PointerEvent): void {\n this.keyboard.set(false);\n this.active.set(key);\n this.track(event);\n }\n\n protected track(event: PointerEvent): void {\n const svg = (event.currentTarget as SVGElement).ownerSVGElement;\n const rect = svg?.getBoundingClientRect();\n if (rect) this.pointer.set({ x: event.clientX - rect.left, y: event.clientY - rect.top });\n }\n\n /** Zoom to a breadcrumb depth (0 = everything) and say so to screen readers. */\n protected zoomTo(depth: number): void {\n this.path.set(this.zoom().indices.slice(0, depth));\n this.active.set(null);\n this.announceZoom();\n }\n\n private announceZoom(): void {\n const z = this.zoom();\n const count = this.layoutRoot()?.leaves().length ?? 0;\n const t = this.text();\n this.announcement.set(`${z.names.length ? t.zoomedTo(z.names.join(PATH_SEP)) : this.rootName()} — ${t.itemCount(count)}`);\n }\n\n /** Zoom into the tile's branch — or, at the deepest level, report the leaf. */\n protected activate(key: string): void {\n const t = this.tiles().find((x) => x.key === key);\n if (!t) return;\n const depth = this.zoom().indices.length;\n const full = key.split('/').map(Number);\n if (this.drilldown() && full.length > depth + 1) {\n this.path.set(full.slice(0, depth + 1));\n this.active.set(null);\n this.announceZoom();\n return;\n }\n this.pointClick.emit({ key: t.path, row: t.node.data, index: full[full.length - 1] ?? 0, value: t.node.value ?? null });\n }\n\n protected onKey(event: KeyboardEvent): void {\n const tiles = this.tiles();\n if (!tiles.length) return;\n const pos = tiles.findIndex((t) => t.key === this.active());\n let next = pos;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = pos < 0 ? 0 : (pos + 1) % tiles.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = pos < 0 ? tiles.length - 1 : (pos - 1 + tiles.length) % tiles.length;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = tiles.length - 1;\n break;\n case 'Enter':\n case ' ':\n if (pos >= 0) {\n event.preventDefault();\n this.activate(tiles[pos].key);\n }\n return;\n case 'Escape':\n case 'Backspace':\n if (this.zoom().indices.length) {\n event.preventDefault();\n this.zoomTo(this.zoom().indices.length - 1);\n } else this.active.set(null);\n return;\n default:\n return;\n }\n event.preventDefault();\n this.keyboard.set(true);\n const t = tiles[next];\n this.active.set(t.key);\n this.pointer.set({ x: (t.node.x0 + t.node.x1) / 2, y: (t.node.y0 + t.node.y1) / 2 });\n }\n\n protected readonly legendItems = computed<LegendItem[]>(() => {\n if (this.zoom().indices.length) return [];\n const styles = this.branchStyle();\n const total = this.root().value ?? 0;\n const data = this.data() ?? [];\n return (this.root().children ?? [])\n .filter((c) => c.children?.length)\n .map((c) => {\n const i = data.indexOf(c.data);\n return {\n key: String(i),\n label: c.data.name,\n color: styles[i]?.color ?? slotColor(0),\n shape: 'rect' as const,\n detail: total ? this.pct()((c.value ?? 0) / total) : undefined,\n };\n });\n });\n\n protected readonly legendPosition = computed(() => {\n const l = this.legend();\n if (l === 'auto') return this.legendItems().length > 1 ? 'bottom' : 'none';\n return l;\n });\n\n protected readonly label = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel()!;\n const zoomed = this.zoom().names;\n return [this.heading() || this.text().treemap, zoomed.length ? this.text().zoomedTo(zoomed.join(PATH_SEP)) : '', this.text().totalOf(this.fmt()(this.root().value ?? 0))]\n .filter(Boolean)\n .join(' — ');\n });\n\n protected readonly table = computed<ChartTable>(() => {\n const total = this.root().value ?? 0;\n return {\n columns: [this.text().item, this.text().value, this.text().share],\n rows: this.root()\n .leaves()\n .map((l) => [\n l.ancestors().reverse().slice(1).map((a) => a.data.name).join(PATH_SEP),\n this.fmt()(l.value ?? 0),\n total ? this.pct()((l.value ?? 0) / total) : '—',\n ]),\n };\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { area as d3area, curveMonotoneX, line as d3line } from 'd3-shape';\nimport { SdsChartTooltipContext, SdsNumberFormat } from './chart-types';\nimport { barPath, chartAnimates, chartLabels, chartLocale, chartPalette, chartUid, createTween, Geometry, hostWidth, num, numberOrNull, slotColor, valueFormatter } from './chart-core';\nimport { SdsChartTooltipBox } from './chart-parts';\n\nexport type SdsSparklineVariant = 'line' | 'area' | 'bar';\n\n/**\n * A word-sized trend — in a table cell, a KPI tile, a list row. No axes, no legend: the shape is the\n * message. Line, area or micro-bars; an optional normal range band and reference value; the last\n * point (and optionally min / max) marked; a tiny hover readout; and an accessible summary (first,\n * last, min, max) so the trend is never visual-only.\n *\n * @example\n * <sds-sparkline [data]=\"[12, 14, 13, 18, 21, 19, 24]\" label=\"Admissions sur 7 jours\" />\n */\n@Component({\n selector: 'sds-sparkline',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsChartTooltipBox],\n host: {\n class: 'relative align-middle',\n '[class.block]': 'width() === null',\n '[class.inline-block]': 'width() !== null',\n '[style.width.px]': 'width()',\n '[style.height.px]': 'height()',\n },\n template: `\n @if (geo(); as G) {\n <svg\n class=\"block overflow-visible\"\n [attr.width]=\"width() === null ? '100%' : G.width\"\n [attr.preserveAspectRatio]=\"width() === null ? 'none' : null\"\n [attr.height]=\"height()\"\n [attr.viewBox]=\"'0 0 ' + G.width + ' ' + height()\"\n role=\"img\"\n [attr.aria-label]=\"summary()\"\n (pointermove)=\"onPointer($event)\"\n (pointerleave)=\"active.set(null)\"\n >\n @if (variant() === 'area') {\n <defs>\n <linearGradient [attr.id]=\"uid\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"0%\" [style.stop-color]=\"tint()\" stop-opacity=\"0.25\" />\n <stop offset=\"100%\" [style.stop-color]=\"tint()\" stop-opacity=\"0.02\" />\n </linearGradient>\n </defs>\n }\n @if (G.band) {\n <rect x=\"0\" [attr.y]=\"G.band.y\" [attr.width]=\"G.width\" [attr.height]=\"G.band.h\" class=\"fill-ink\" fill-opacity=\"0.08\" />\n }\n @if (G.ref !== null) {\n <line x1=\"0\" [attr.x2]=\"G.width\" [attr.y1]=\"G.ref\" [attr.y2]=\"G.ref\" stroke=\"var(--sds-chart-axis, #d3d8e2)\" stroke-width=\"1\" shape-rendering=\"crispEdges\" />\n }\n @if (variant() === 'bar') {\n @for (b of bars(); track $index) {\n <path [attr.d]=\"b.d\" [style.fill]=\"b.last ? tint() : barTint()\" />\n }\n } @else {\n @if (variant() === 'area') {\n <path [attr.d]=\"paths().area\" [attr.fill]=\"'url(#' + uid + ')'\" />\n }\n <path [attr.d]=\"paths().line\" fill=\"none\" [style.stroke]=\"tint()\" [attr.stroke-width]=\"strokeWidth()\" stroke-linejoin=\"round\" stroke-linecap=\"round\" />\n @for (m of markers(); track m.kind) {\n <circle [attr.cx]=\"m.x\" [attr.cy]=\"m.y\" [attr.r]=\"m.kind === 'last' ? 3 : 2.5\" [style.fill]=\"m.kind === 'last' ? tint() : 'var(--color-ink-faint)'\" stroke=\"var(--color-surface)\" stroke-width=\"1.5\" />\n }\n }\n @if (activePoint(); as a) {\n <line [attr.x1]=\"a.x\" [attr.x2]=\"a.x\" y1=\"0\" [attr.y2]=\"height()\" stroke=\"var(--color-ink-faint)\" stroke-width=\"1\" />\n <circle [attr.cx]=\"a.x\" [attr.cy]=\"a.y\" r=\"3.5\" [style.fill]=\"tint()\" stroke=\"var(--color-surface)\" stroke-width=\"1.5\" />\n }\n </svg>\n @if (tooltip()) {\n <sds-chart-tooltip-box\n [ctx]=\"tooltipCtx()\"\n [x]=\"activePoint()?.x ?? 0\"\n [y]=\"height() / 2\"\n [containerWidth]=\"G.width\"\n [containerHeight]=\"height()\"\n />\n }\n }\n `,\n})\nexport class SdsSparkline {\n /** The values in order. `null` leaves a gap. */\n readonly data = input<readonly (number | null | undefined)[] | null | undefined>([]);\n /** Optional name per point (dates, weeks) for the hover readout. */\n readonly labels = input<readonly string[] | null>(null);\n readonly variant = input<SdsSparklineVariant>('line');\n /** Width in px; `null` (default) fills the container. */\n readonly width = input<number | null, unknown>(null, { transform: numberOrNull });\n readonly height = input(32, { transform: numberAttribute });\n /** Any CSS colour. Defaults to the first categorical slot. */\n readonly color = input<string | null>(null);\n readonly strokeWidth = input(1.75, { transform: numberAttribute });\n /** Mark the last point. */\n readonly showLast = input(true, { transform: booleanAttribute });\n /** Mark the lowest and highest points. */\n readonly showMinMax = input(false, { transform: booleanAttribute });\n /** Shade a normal range, e.g. [60, 100]. */\n readonly band = input<readonly [number, number] | null>(null);\n /** Draw a reference value (a target, zero, last year's mean). */\n readonly reference = input<number | null>(null);\n /** Include zero in the value range (bars always do). */\n readonly includeZero = input(false, { transform: booleanAttribute });\n readonly valueFormat = input<SdsNumberFormat | null>(null);\n /** What the trend measures — prefixes the spoken summary. */\n readonly label = input<string>('');\n /** Replace the generated summary (\"Trend: from 12 to 24 — min…\", `labels.sparklineSummary`) entirely. */\n readonly ariaLabel = input<string | null>(null);\n readonly tooltip = input(true, { transform: booleanAttribute });\n readonly animate = input(true, { transform: booleanAttribute });\n readonly locale = input<string | null>(null);\n\n protected readonly uid = chartUid('sds-spark');\n protected readonly active = signal<number | null>(null);\n\n private readonly measured = hostWidth();\n private readonly loc = chartLocale(() => this.locale());\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n private readonly text = chartLabels();\n private readonly animates = chartAnimates(() => this.animate());\n private readonly fmt = computed(() => valueFormatter(this.loc(), this.valueFormat()));\n\n private readonly palette = chartPalette();\n protected readonly tint = computed(() => this.color() ?? slotColor(0, this.palette));\n protected readonly barTint = computed(() => `color-mix(in oklab, ${this.tint()} 45%, transparent)`);\n\n private readonly values = computed(() => (this.data() ?? []).map((v) => num(v)));\n\n protected readonly geo = computed(() => {\n const W = this.width() ?? this.measured();\n const H = this.height();\n const vals = this.values();\n const defined = vals.filter((v): v is number => v !== null);\n if (W <= 0 || !defined.length) return null;\n const extra: number[] = [];\n const band = this.band();\n if (band) extra.push(band[0], band[1]);\n if (this.reference() !== null) extra.push(this.reference()!);\n if (this.includeZero() || this.variant() === 'bar') extra.push(0);\n let lo = Math.min(...defined, ...extra);\n let hi = Math.max(...defined, ...extra);\n if (lo === hi) {\n lo -= 1;\n hi += 1;\n }\n const pad = this.variant() === 'bar' ? 0 : 4;\n const n = vals.length;\n const x = (i: number) => (this.variant() === 'bar' ? ((i + 0.5) / n) * W : n === 1 ? W / 2 : pad + (i / (n - 1)) * (W - pad * 2));\n const y = (v: number) => pad + (1 - (v - lo) / (hi - lo)) * (H - pad * 2);\n return {\n width: W,\n x,\n y,\n base: y(Math.max(lo, Math.min(hi, 0))),\n band: band ? { y: y(Math.max(band[0], band[1])), h: Math.abs(y(band[0]) - y(band[1])) } : null,\n ref: this.reference() !== null ? y(this.reference()!) : null,\n };\n });\n\n private readonly target = computed<Geometry>(() => {\n const G = this.geo();\n const out = new Map<string, readonly number[]>();\n if (!G) return out;\n this.values().forEach((v, i) => {\n if (v !== null) out.set(String(i), [G.x(i), G.y(v)]);\n });\n return out;\n });\n\n private readonly ready = computed(() => this.measured() > 0 || this.width() !== null);\n private readonly version = computed(() => {\n this.data();\n return this.ready() ? {} : null;\n });\n\n private readonly tween = createTween({\n target: () => this.target(),\n version: () => this.version(),\n enabled: () => this.animates(),\n enter: (_k, to) => [to[0], this.geo()?.base ?? to[1]],\n duration: 500,\n });\n\n private readonly seq = computed(() => {\n const t = this.tween();\n return this.values().map((_, i) => t.get(String(i)));\n });\n\n protected readonly paths = computed(() => {\n const G = this.geo();\n const seq = this.seq();\n const line = d3line<readonly number[] | undefined>()\n .defined((d) => !!d)\n .x((d) => d![0])\n .y((d) => d![1])\n .curve(curveMonotoneX);\n const area = d3area<readonly number[] | undefined>()\n .defined((d) => !!d)\n .x((d) => d![0])\n .y0(() => G?.base ?? 0)\n .y1((d) => d![1])\n .curve(curveMonotoneX);\n return { line: line(seq) ?? '', area: area(seq) ?? '' };\n });\n\n protected readonly bars = computed(() => {\n const G = this.geo();\n if (!G) return [];\n const n = this.values().length;\n const slot = G.width / Math.max(1, n);\n const w = Math.max(1, Math.min(8, slot - 1.5));\n return this.seq().map((p, i) => {\n if (!p) return { d: '', last: false };\n const top = Math.min(p[1], G.base);\n const h = Math.abs(G.base - p[1]);\n return { d: barPath(p[0] - w / 2, top, w, Math.max(h, 0.5), 1.5, p[1] <= G.base ? 'top' : 'bottom'), last: i === n - 1 };\n });\n });\n\n protected readonly markers = computed(() => {\n const G = this.geo();\n if (!G) return [];\n const vals = this.values();\n const out: { kind: string; x: number; y: number }[] = [];\n if (this.showMinMax()) {\n let min = -1;\n let max = -1;\n vals.forEach((v, i) => {\n if (v === null) return;\n if (min < 0 || v < vals[min]!) min = i;\n if (max < 0 || v > vals[max]!) max = i;\n });\n if (min >= 0) out.push({ kind: 'min', x: G.x(min), y: G.y(vals[min]!) });\n if (max >= 0 && max !== min) out.push({ kind: 'max', x: G.x(max), y: G.y(vals[max]!) });\n }\n if (this.showLast()) {\n for (let i = vals.length - 1; i >= 0; i--) {\n if (vals[i] !== null) {\n const p = this.seq()[i];\n if (p) out.push({ kind: 'last', x: p[0], y: p[1] });\n break;\n }\n }\n }\n return out;\n });\n\n protected readonly activePoint = computed(() => {\n const i = this.active();\n const G = this.geo();\n const v = i === null ? null : this.values()[i];\n if (i === null || !G || v === null || v === undefined) return null;\n return { x: G.x(i), y: G.y(v) };\n });\n\n protected readonly tooltipCtx = computed<SdsChartTooltipContext | null>(() => {\n const i = this.active();\n if (i === null) return null;\n const v = this.values()[i];\n if (v === null || v === undefined) return null;\n return {\n title: this.labels()?.[i] ?? '',\n rows: [{ key: 'v', label: this.label(), value: this.fmt()(v), raw: v, color: this.tint(), shape: 'line' }],\n data: [],\n index: i,\n };\n });\n\n /** \"Admissions: from 12 to 24 — min 12, max 24, 7 points\" (`labels.sparklineSummary`). */\n protected readonly summary = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel()!;\n const vals = this.values().filter((v): v is number => v !== null);\n const t = this.text();\n if (!vals.length) return this.label() || t.trend;\n const f = this.fmt();\n return t.sparklineSummary({\n label: this.label() || t.trend,\n first: f(vals[0]),\n last: f(vals[vals.length - 1]),\n min: f(Math.min(...vals)),\n max: f(Math.max(...vals)),\n count: vals.length,\n });\n });\n\n protected onPointer(event: PointerEvent): void {\n const G = this.geo();\n const rect = (event.currentTarget as SVGElement).getBoundingClientRect();\n const n = this.values().length;\n if (!G || !rect.width || !n) return;\n const px = ((event.clientX - rect.left) / rect.width) * G.width;\n let best = 0;\n let dist = Infinity;\n for (let i = 0; i < n; i++) {\n const d = Math.abs(G.x(i) - px);\n if (d < dist) {\n dist = d;\n best = i;\n }\n }\n this.active.set(best);\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { SdsIcon, SdsIconName } from '@besaitech/ng-design-system';\nimport { SdsNumberFormat } from './chart-types';\nimport { chartLabels, chartLocale, valueFormatter } from './chart-core';\nimport { SdsSparkline, SdsSparklineVariant } from './sds-sparkline';\n\n/** How the change is expressed: relative (+12,4 %) or in the value's own unit (+38). */\nexport type SdsKpiDeltaMode = 'percent' | 'absolute';\nexport type SdsKpiSize = 'md' | 'lg';\n/** `card` draws its own surface; `plain` sits inside a card or grid you already have. */\nexport type SdsKpiAppearance = 'card' | 'plain';\n\n/**\n * A stat tile — the number IS the chart. Label, headline value, a signed change against a named\n * period whose colour means \"good\" or \"bad\" (set `upIsGood` false for waits, costs, incidents), an\n * arrow glyph and a spoken sentence so the change never relies on colour, and an optional sparkline\n * of the recent trend. Values auto-compact (12 900 → 12,9 k) unless a format says otherwise.\n *\n * @example\n * <sds-kpi label=\"Admissions\" [value]=\"1284\" [previous]=\"1150\" deltaLabel=\"vs semaine passée\" [trend]=\"last12Weeks\" />\n */\n@Component({\n selector: 'sds-kpi',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon, SdsSparkline],\n host: { class: 'block @container' },\n template: `\n <div\n role=\"group\"\n [attr.aria-label]=\"label()\"\n class=\"flex h-full flex-col gap-2\"\n [class.rounded-card]=\"appearance() === 'card'\"\n [class.border]=\"appearance() === 'card'\"\n [class.border-border]=\"appearance() === 'card'\"\n [class.bg-surface]=\"appearance() === 'card'\"\n [class.p-4]=\"appearance() === 'card'\"\n [attr.aria-busy]=\"loading() || null\"\n >\n <div class=\"flex items-center gap-2\">\n @if (icon(); as i) {\n <span class=\"grid size-7 shrink-0 place-items-center rounded-lg bg-muted text-ink-soft\">\n <sds-icon [name]=\"i\" [size]=\"15\" />\n </span>\n }\n <p class=\"min-w-0 truncate text-sm font-medium text-ink-soft\" [attr.title]=\"label()\">{{ label() }}</p>\n </div>\n\n <!-- Narrow tiles stack the trend under the figure; from ~18rem it moves beside it. -->\n <div class=\"flex flex-col gap-2 @[18rem]:flex-row @[18rem]:items-end @[18rem]:justify-between @[18rem]:gap-3\">\n <div class=\"min-w-0\">\n @if (loading()) {\n <div class=\"h-8 w-24 animate-pulse rounded bg-muted\" [class.h-10]=\"size() === 'lg'\"></div>\n } @else {\n <p class=\"whitespace-nowrap font-semibold tracking-tight text-ink\" [class.text-2xl]=\"size() === 'md'\" [class.text-4xl]=\"size() === 'lg'\">\n {{ display() }}\n </p>\n }\n @if (deltaView(); as d) {\n <p class=\"mt-1 flex flex-wrap items-center gap-x-1.5 text-xs\">\n <!-- Visible change is decorative for screen readers: the sr-only sentence says it once. -->\n <span aria-hidden=\"true\" class=\"inline-flex items-center gap-0.5 whitespace-nowrap font-semibold tabular-nums\" [style.color]=\"d.tone\">\n @if (d.icon) {\n <sds-icon [name]=\"d.icon\" [size]=\"14\" />\n }\n {{ d.text }}\n </span>\n @if (deltaLabel()) {\n <span aria-hidden=\"true\" class=\"text-ink-faint\">{{ deltaLabel() }}</span>\n }\n <span class=\"sr-only\">{{ d.spoken }}</span>\n </p>\n } @else if (hint()) {\n <p class=\"mt-1 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n </div>\n @if (trend()?.length) {\n <div [class]=\"size() === 'lg' ? 'mb-0.5 w-full shrink-0 @[18rem]:w-36' : 'mb-0.5 w-full shrink-0 @[18rem]:w-24'\">\n <sds-sparkline\n [data]=\"trend()\"\n [labels]=\"trendLabels()\"\n [variant]=\"trendVariant()\"\n [height]=\"size() === 'lg' ? 44 : 32\"\n [color]=\"trendColor()\"\n [valueFormat]=\"valueFormat()\"\n [label]=\"label()\"\n [locale]=\"locale()\"\n />\n </div>\n }\n </div>\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n }\n `,\n})\nexport class SdsKpi {\n readonly label = input.required<string>();\n readonly value = input<number | null | undefined>(null);\n /** Value format. Default: exact below 10 000, compact above (12,9 k · 4,2 M). */\n readonly valueFormat = input<SdsNumberFormat | null>(null);\n /** The comparison value — the change is computed from it. */\n readonly previous = input<number | null | undefined>(null);\n /** Give the change directly instead of `previous` (a ratio in `percent` mode: 0.124 = +12,4 %). */\n readonly delta = input<number | null | undefined>(null);\n readonly deltaMode = input<SdsKpiDeltaMode>('percent');\n /** The named period, e.g. \"vs mois dernier\". */\n readonly deltaLabel = input<string>('');\n /** False when a rise is bad news (waiting time, cost, incidents). */\n readonly upIsGood = input(true, { transform: booleanAttribute });\n readonly trend = input<readonly (number | null)[] | null>(null);\n readonly trendLabels = input<readonly string[] | null>(null);\n readonly trendVariant = input<SdsSparklineVariant>('line');\n readonly trendColor = input<string | null>(null);\n readonly icon = input<SdsIconName | null>(null);\n /** Shown under the value when there is no change to report. */\n readonly hint = input<string>('');\n readonly size = input<SdsKpiSize>('md');\n readonly appearance = input<SdsKpiAppearance>('card');\n readonly loading = input(false, { transform: booleanAttribute });\n readonly locale = input<string | null>(null);\n\n private readonly loc = chartLocale(() => this.locale());\n /** Built-in strings (provideSdsCharts labels over the English defaults). */\n private readonly text = chartLabels();\n\n protected readonly display = computed(() => {\n const v = this.value();\n if (v === null || v === undefined || !Number.isFinite(v)) return '—';\n // Default: exact below 10 000 (1 284 stays 1 284), compact above (12 900 → 12,9 k).\n const fmt = this.valueFormat() ?? (Math.abs(v) < 10_000 ? { maximumFractionDigits: 1 } : { notation: 'compact', maximumFractionDigits: 1 });\n return valueFormatter(this.loc(), fmt)(v);\n });\n\n private readonly deltaValue = computed(() => {\n const explicit = this.delta();\n if (explicit !== null && explicit !== undefined) return explicit;\n const v = this.value();\n const p = this.previous();\n if (v === null || v === undefined || p === null || p === undefined) return null;\n if (this.deltaMode() === 'absolute') return v - p;\n return p === 0 ? null : (v - p) / Math.abs(p);\n });\n\n /** The change, signed, with a tone that means good/bad — never colour alone (glyph + words). */\n protected readonly deltaView = computed(() => {\n const d = this.deltaValue();\n if (d === null || !Number.isFinite(d)) return null;\n const loc = this.loc();\n const percent = this.deltaMode() === 'percent';\n const f = percent\n ? valueFormatter(loc, { style: 'percent', maximumFractionDigits: 1, signDisplay: 'exceptZero' })\n : valueFormatter(loc, { ...(this.absoluteFormat()), signDisplay: 'exceptZero' });\n const text = f(d);\n // Flat when the change rounds to nothing at the displayed precision (\"0 %\" never shows an arrow).\n const flat = Math.abs(d) < 1e-9 || !/[1-9]/.test(text);\n const up = d > 0;\n const good = flat ? null : up === this.upIsGood();\n // Accent mixed 30 % toward ink: ≥ 4.5:1 for 12 px text on the surface in both modes (the raw\n // accents are ~3.5:1 on white). Ink darkens in light mode and lightens in dark, so one rule fits both.\n const tone =\n good === null\n ? 'var(--color-ink-soft)'\n : `color-mix(in oklab, ${good ? 'var(--color-accent-green)' : 'var(--color-accent-red)'} 70%, var(--color-ink))`;\n const icon: SdsIconName | null = flat ? 'minus' : up ? 'trending-up' : 'trending-down';\n const spoken = this.text().kpiChange({\n direction: flat ? 'flat' : up ? 'up' : 'down',\n delta: flat ? '' : text.replace(/^[+−-]/, ''),\n period: this.deltaLabel(),\n good,\n });\n return { text, tone, icon, spoken };\n });\n\n private absoluteFormat(): Intl.NumberFormatOptions {\n const fmt = this.valueFormat();\n return fmt && typeof fmt !== 'function' ? fmt : { notation: 'compact', maximumFractionDigits: 1 };\n }\n}\n","/*\n * Secondary entry point `@besaitech/ng-design-system/charts` — the d3-powered chart family.\n *\n * Kept out of the root entry on purpose: the root is one module, so anything it exports that an app\n * uses ANYWHERE (even on a lazy route) lands in the app's initial chunk. Importing the charts from\n * here lets the bundler keep them, and d3, in the lazy chunk of the page that draws them.\n *\n * Chart configuration and strings (provideSdsCharts, SDS_CHART_CONFIG, SdsChartConfig,\n * SdsChartLabels, SDS_CHART_LABELS_EN) live in the ROOT entry so app.config can provide them eagerly.\n */\nexport * from './chart-types';\nexport * from './sds-chart-tooltip';\nexport * from './sds-line-chart';\nexport * from './sds-bar-chart';\nexport * from './sds-scatter-chart';\nexport * from './sds-donut-chart';\nexport * from './sds-heatmap';\nexport * from './sds-treemap';\nexport * from './sds-sparkline';\nexport * from './sds-kpi';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["d3stack","area","d3line","d3area","GAP","d3pie","d3arc","line"],"mappings":"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"}