@nexterajs/ui 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +279 -34
- package/fesm2022/nexterajs-ui-charts.mjs +1096 -0
- package/fesm2022/nexterajs-ui-charts.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-core.mjs +652 -12
- package/fesm2022/nexterajs-ui-core.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-display.mjs +1142 -0
- package/fesm2022/nexterajs-ui-display.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-dropdowns.mjs +321 -33
- package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-file-uploader.mjs +572 -10
- package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-forms.mjs +2027 -136
- package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-grid.mjs +1222 -188
- package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-intl.mjs +103 -11
- package/fesm2022/nexterajs-ui-intl.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-navigation.mjs +1054 -0
- package/fesm2022/nexterajs-ui-navigation.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-notify.mjs +46 -44
- package/fesm2022/nexterajs-ui-notify.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-overlay.mjs +1671 -0
- package/fesm2022/nexterajs-ui-overlay.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-pivot.mjs +51 -26
- package/fesm2022/nexterajs-ui-pivot.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-shell.mjs +542 -0
- package/fesm2022/nexterajs-ui-shell.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-tree-view.mjs +5 -2
- package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-validation.mjs +42 -11
- package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
- package/fesm2022/nexterajs-ui.mjs +5 -0
- package/fesm2022/nexterajs-ui.mjs.map +1 -1
- package/package.json +33 -2
- package/styles/_dropdown.scss +5 -5
- package/styles/_editor.scss +52 -17
- package/styles/_mixins.scss +1 -1
- package/styles/_scrollbar.scss +5 -5
- package/styles/_status.scss +21 -0
- package/styles/_toast.scss +14 -14
- package/styles/_tokens.scss +420 -3
- package/styles/_widget.scss +14 -3
- package/styles/index.scss +6 -4
- package/types/nexterajs-ui-charts.d.ts +446 -0
- package/types/nexterajs-ui-core.d.ts +387 -22
- package/types/nexterajs-ui-display.d.ts +720 -0
- package/types/nexterajs-ui-dropdowns.d.ts +191 -48
- package/types/nexterajs-ui-file-uploader.d.ts +236 -7
- package/types/nexterajs-ui-forms.d.ts +675 -30
- package/types/nexterajs-ui-grid.d.ts +448 -93
- package/types/nexterajs-ui-intl.d.ts +39 -4
- package/types/nexterajs-ui-navigation.d.ts +531 -0
- package/types/nexterajs-ui-notify.d.ts +4 -2
- package/types/nexterajs-ui-overlay.d.ts +703 -0
- package/types/nexterajs-ui-pivot.d.ts +56 -48
- package/types/nexterajs-ui-shell.d.ts +294 -0
- package/types/nexterajs-ui-tree-view.d.ts +6 -3
- package/types/nexterajs-ui-validation.d.ts +20 -11
- package/types/nexterajs-ui.d.ts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexterajs-ui-charts.mjs","sources":["../../../projects/nextera-ui/charts/src/lib/core/nxe-chart-scale.ts","../../../projects/nextera-ui/charts/src/lib/core/nxe-chart-geometry.ts","../../../projects/nextera-ui/charts/src/lib/core/nxe-chart-shared.ts","../../../projects/nextera-ui/charts/src/lib/data-table/nxe-chart-data-table.component.ts","../../../projects/nextera-ui/charts/src/lib/data-table/nxe-chart-data-table.component.html","../../../projects/nextera-ui/charts/src/lib/legend/nxe-chart-legend.component.ts","../../../projects/nextera-ui/charts/src/lib/legend/nxe-chart-legend.component.html","../../../projects/nextera-ui/charts/src/lib/line-chart/nxe-line-chart.component.ts","../../../projects/nextera-ui/charts/src/lib/line-chart/nxe-line-chart.component.html","../../../projects/nextera-ui/charts/src/lib/area-chart/nxe-area-chart.component.ts","../../../projects/nextera-ui/charts/src/lib/donut-chart/nxe-donut-chart.component.ts","../../../projects/nextera-ui/charts/src/lib/donut-chart/nxe-donut-chart.component.html","../../../projects/nextera-ui/charts/src/public-api.ts","../../../projects/nextera-ui/charts/src/nexterajs-ui-charts.ts"],"sourcesContent":["// Scale and tick maths shared by the charts. Pure functions: no DOM, no Angular.\r\n\r\n/** A \"nice\" axis: a domain that starts and ends on a tick, and the ticks between. */\r\nexport interface NxeNiceScale {\r\n readonly min: number;\r\n readonly max: number;\r\n readonly step: number;\r\n readonly ticks: readonly number[];\r\n}\r\n\r\n/** Rounds `value` to a 1, 2, 5 or 10 times a power of ten (Heckbert). */\r\nexport function niceNumber(value: number, round: boolean): number {\r\n if (!(value > 0) || !isFinite(value)) {\r\n return 1;\r\n }\r\n const exponent = Math.floor(Math.log10(value));\r\n const fraction = value / Math.pow(10, exponent);\r\n let nice: number;\r\n if (round) {\r\n nice = fraction < 1.5 ? 1 : fraction < 3 ? 2 : fraction < 7 ? 5 : 10;\r\n } else {\r\n nice = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\r\n }\r\n return nice * Math.pow(10, exponent);\r\n}\r\n\r\n/** Decimal places needed to write multiples of `step` exactly (0.25 -> 2, 5 -> 0). */\r\nexport function decimalsOf(step: number): number {\r\n if (!isFinite(step) || step <= 0) {\r\n return 0;\r\n }\r\n let decimals = 0;\r\n let scaled = step;\r\n while (decimals < 10 && Math.abs(Math.round(scaled) - scaled) > 1e-9 * Math.max(1, Math.abs(scaled))) {\r\n scaled *= 10;\r\n decimals++;\r\n }\r\n return decimals;\r\n}\r\n\r\n/**\r\n * Ticks for `[min, max]`: about `targetTicks` of them, spaced 1, 2 or 5 times a power of ten, the\r\n * first at or below `min` and the last at or above `max`. A flat domain (`min === max`) opens up\r\n * around the value so the line has somewhere to sit.\r\n */\r\nexport function niceScale(min: number, max: number, targetTicks = 5): NxeNiceScale {\r\n let lo = Math.min(min, max);\r\n let hi = Math.max(min, max);\r\n if (!isFinite(lo) || !isFinite(hi)) {\r\n lo = 0;\r\n hi = 1;\r\n }\r\n if (lo === hi) {\r\n if (lo === 0) {\r\n hi = 1;\r\n } else {\r\n const pad = Math.abs(lo) * 0.1;\r\n lo -= pad;\r\n hi += pad;\r\n }\r\n }\r\n const count = Math.max(2, Math.floor(targetTicks));\r\n const step = niceNumber(niceNumber(hi - lo, false) / (count - 1), true);\r\n const niceMin = Math.floor(lo / step + 1e-9) * step;\r\n const niceMax = Math.ceil(hi / step - 1e-9) * step;\r\n const decimals = decimalsOf(step);\r\n const ticks: number[] = [];\r\n const n = Math.round((niceMax - niceMin) / step);\r\n for (let i = 0; i <= n; i++) {\r\n ticks.push(Number((niceMin + i * step).toFixed(decimals)));\r\n }\r\n return { min: ticks[0], max: ticks[ticks.length - 1], step, ticks };\r\n}\r\n\r\n/** Maps `[d0, d1]` onto `[r0, r1]`. A degenerate domain maps to the middle of the range. */\r\nexport function linearScale(d0: number, d1: number, r0: number, r1: number): (value: number) => number {\r\n if (d1 === d0) {\r\n return () => (r0 + r1) / 2;\r\n }\r\n const k = (r1 - r0) / (d1 - d0);\r\n return (value) => r0 + (value - d0) * k;\r\n}\r\n\r\n/** A `#,##0.00` style pattern that shows `decimals` places, for tick labels that share a step. */\r\nexport function patternForDecimals(decimals: number): string {\r\n return decimals > 0 ? `#,##0.${'0'.repeat(decimals)}` : '#,##0';\r\n}\r\n\r\n/** Indexes (0-based) of at most `maxLabels` evenly spaced labels out of `count`, always including the first. */\r\nexport function labelIndexes(count: number, maxLabels: number): number[] {\r\n if (count <= 0) {\r\n return [];\r\n }\r\n const step = Math.max(1, Math.ceil(count / Math.max(1, maxLabels)));\r\n const out: number[] = [];\r\n for (let i = 0; i < count; i += step) {\r\n out.push(i);\r\n }\r\n return out;\r\n}\r\n\r\n/** Index of the entry of the ascending `xs` nearest to `x`; -1 when `xs` is empty. */\r\nexport function nearestIndex(xs: readonly number[], x: number): number {\r\n if (xs.length === 0) {\r\n return -1;\r\n }\r\n let lo = 0;\r\n let hi = xs.length - 1;\r\n while (hi - lo > 1) {\r\n const mid = (lo + hi) >> 1;\r\n if (xs[mid] <= x) {\r\n lo = mid;\r\n } else {\r\n hi = mid;\r\n }\r\n }\r\n return Math.abs(xs[lo] - x) <= Math.abs(xs[hi] - x) ? lo : hi;\r\n}\r\n","// Path geometry for the charts. Pure functions returning SVG path data.\r\n\r\nexport interface NxeChartPoint {\r\n readonly x: number;\r\n readonly y: number;\r\n}\r\n\r\nconst TAU = Math.PI * 2;\r\n\r\nconst fmt = (n: number): string => String(Math.round(n * 100) / 100);\r\n\r\n/** Splits a series at its gaps: each run of consecutive defined points is one segment. */\r\nexport function segments(points: readonly (NxeChartPoint | null)[]): NxeChartPoint[][] {\r\n const out: NxeChartPoint[][] = [];\r\n let run: NxeChartPoint[] = [];\r\n for (const p of points) {\r\n if (p) {\r\n run.push(p);\r\n } else if (run.length) {\r\n out.push(run);\r\n run = [];\r\n }\r\n }\r\n if (run.length) {\r\n out.push(run);\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * The line through `points`, `null` entries leaving gaps (the pen lifts; it never joins across a\r\n * missing value). A run of one point draws no line: it shows as a marker.\r\n */\r\nexport function linePath(points: readonly (NxeChartPoint | null)[]): string {\r\n return segments(points)\r\n .filter((run) => run.length > 1)\r\n .map((run) => run.map((p, i) => `${i === 0 ? 'M' : 'L'}${fmt(p.x)} ${fmt(p.y)}`).join(''))\r\n .join('');\r\n}\r\n\r\n/**\r\n * The filled area between `top` and `bottom` (same length; `null` in either leaves a gap in the\r\n * fill too). `bottom` is a baseline y for a plain area, or the lower edge of a stacked band.\r\n */\r\nexport function areaPath(\r\n top: readonly (NxeChartPoint | null)[],\r\n bottom: number | readonly (NxeChartPoint | null)[],\r\n): string {\r\n const base: readonly (NxeChartPoint | null)[] =\r\n typeof bottom === 'number' ? top.map((p) => (p ? { x: p.x, y: bottom } : null)) : bottom;\r\n const out: string[] = [];\r\n let run: { t: NxeChartPoint; b: NxeChartPoint }[] = [];\r\n const flush = () => {\r\n if (run.length > 1) {\r\n const forward = run.map((r, i) => `${i === 0 ? 'M' : 'L'}${fmt(r.t.x)} ${fmt(r.t.y)}`).join('');\r\n const back = run\r\n .slice()\r\n .reverse()\r\n .map((r) => `L${fmt(r.b.x)} ${fmt(r.b.y)}`)\r\n .join('');\r\n out.push(`${forward}${back}Z`);\r\n }\r\n run = [];\r\n };\r\n top.forEach((t, i) => {\r\n const b = base[i];\r\n if (t && b) {\r\n run.push({ t, b });\r\n } else {\r\n flush();\r\n }\r\n });\r\n flush();\r\n return out.join('');\r\n}\r\n\r\n/**\r\n * Cumulative stack of `rows` (one array of values per series, aligned by index). Missing and\r\n * negative values count as 0 so the bands above them still sit on the stack. Returns the lower and\r\n * upper edge per series.\r\n */\r\nexport function stackValues(\r\n rows: readonly (readonly (number | null | undefined)[])[],\r\n): { lower: number[]; upper: number[] }[] {\r\n const length = rows.reduce((m, r) => Math.max(m, r.length), 0);\r\n const running = new Array<number>(length).fill(0);\r\n return rows.map((row) => {\r\n const lower = running.slice();\r\n const upper = running.map((total, i) => {\r\n const v = row[i];\r\n return total + (typeof v === 'number' && isFinite(v) ? Math.max(0, v) : 0);\r\n });\r\n for (let i = 0; i < length; i++) {\r\n running[i] = upper[i];\r\n }\r\n return { lower, upper };\r\n });\r\n}\r\n\r\nexport interface NxeDonutArc {\r\n readonly startAngle: number;\r\n readonly endAngle: number;\r\n readonly path: string;\r\n /** Midpoint of the arc on the ring's centre line, for a tooltip anchor. */\r\n readonly centroid: NxeChartPoint;\r\n}\r\n\r\nfunction polar(cx: number, cy: number, r: number, angle: number): NxeChartPoint {\r\n // 0 is 12 o'clock, angles grow clockwise.\r\n return { x: cx + r * Math.sin(angle), y: cy - r * Math.cos(angle) };\r\n}\r\n\r\n/**\r\n * Ring segments for `values` (zeros and negatives get no arc, `null` in the result). `gap` is the\r\n * visible gap between neighbours in px, measured on the ring's centre line, so it reads as the 2px\r\n * surface gap the mark spec asks for. A lone segment that is the whole ring is drawn as two half\r\n * arcs (an SVG arc cannot start and end on the same point) with no gap.\r\n */\r\nexport function donutArcs(\r\n values: readonly number[],\r\n cx: number,\r\n cy: number,\r\n outer: number,\r\n inner: number,\r\n gap = 2,\r\n): (NxeDonutArc | null)[] {\r\n const total = values.reduce((s, v) => s + (v > 0 ? v : 0), 0);\r\n if (total <= 0) {\r\n return values.map(() => null);\r\n }\r\n const drawn = values.filter((v) => v > 0).length;\r\n const mid = (outer + inner) / 2;\r\n const pad = drawn > 1 ? gap / mid : 0;\r\n let cursor = 0;\r\n return values.map((v) => {\r\n if (!(v > 0)) {\r\n return null;\r\n }\r\n const sweep = (v / total) * TAU;\r\n const a0 = cursor + pad / 2;\r\n const a1 = Math.max(a0, cursor + sweep - pad / 2);\r\n const centroid = polar(cx, cy, mid, cursor + sweep / 2);\r\n cursor += sweep;\r\n if (a1 - a0 >= TAU - 1e-6) {\r\n const o0 = polar(cx, cy, outer, 0);\r\n const o1 = polar(cx, cy, outer, Math.PI);\r\n const i0 = polar(cx, cy, inner, 0);\r\n const i1 = polar(cx, cy, inner, Math.PI);\r\n const path =\r\n `M${fmt(o0.x)} ${fmt(o0.y)}A${outer} ${outer} 0 1 1 ${fmt(o1.x)} ${fmt(o1.y)}A${outer} ${outer} 0 1 1 ${fmt(o0.x)} ${fmt(o0.y)}Z` +\r\n `M${fmt(i0.x)} ${fmt(i0.y)}A${inner} ${inner} 0 1 0 ${fmt(i1.x)} ${fmt(i1.y)}A${inner} ${inner} 0 1 0 ${fmt(i0.x)} ${fmt(i0.y)}Z`;\r\n return { startAngle: 0, endAngle: TAU, path, centroid };\r\n }\r\n const large = a1 - a0 > Math.PI ? 1 : 0;\r\n const os = polar(cx, cy, outer, a0);\r\n const oe = polar(cx, cy, outer, a1);\r\n const ie = polar(cx, cy, inner, a1);\r\n const is = polar(cx, cy, inner, a0);\r\n const path =\r\n `M${fmt(os.x)} ${fmt(os.y)}A${outer} ${outer} 0 ${large} 1 ${fmt(oe.x)} ${fmt(oe.y)}` +\r\n `L${fmt(ie.x)} ${fmt(ie.y)}A${inner} ${inner} 0 ${large} 0 ${fmt(is.x)} ${fmt(is.y)}Z`;\r\n return { startAngle: a0, endAngle: a1, path, centroid };\r\n });\r\n}\r\n\r\n/** A donut segment as the caller states it. */\r\nexport interface NxeDonutDatum {\r\n /** Stable identity for the legend toggle; defaults to the label. */\r\n readonly key?: string;\r\n readonly label: string;\r\n readonly value: number;\r\n /** Any CSS colour or `var(--nxe-ui-...)`; defaults to the next palette slot. */\r\n readonly color?: string;\r\n /** `true` on the grouped remainder `groupOther` appends. */\r\n readonly other?: boolean;\r\n}\r\n\r\n/**\r\n * Keeps the `max - 1` largest items (in their input order) and folds the rest into one \"Other\"\r\n * item last. Returns the live items unchanged when they fit in `max`. Non-positive values never count.\r\n */\r\nexport function groupOther(items: readonly NxeDonutDatum[], max: number, otherLabel: string): NxeDonutDatum[] {\r\n const live = items.filter((i) => i.value > 0 && isFinite(i.value));\r\n const limit = Math.max(2, Math.floor(max));\r\n if (live.length <= limit) {\r\n return live.slice();\r\n }\r\n const keepIdx = live\r\n .map((item, index) => ({ item, index }))\r\n .sort((a, b) => b.item.value - a.item.value || a.index - b.index)\r\n .slice(0, limit - 1)\r\n .map((e) => e.index)\r\n .sort((a, b) => a - b);\r\n const kept = keepIdx.map((i) => live[i]);\r\n const rest = live.filter((_, i) => !keepIdx.includes(i));\r\n return [...kept, { key: '__other__', label: otherLabel, value: rest.reduce((s, r) => s + r.value, 0), other: true }];\r\n}\r\n\r\n/**\r\n * The segment under the point `(x, y)` of a donut drawn by `donutArcs`, or -1 when the point is\r\n * off the ring (in the hole or outside). Gaps belong to the segment whose share they interrupt, so\r\n * the pointer never flickers through the 2px surface line.\r\n */\r\nexport function donutHit(\r\n values: readonly number[],\r\n cx: number,\r\n cy: number,\r\n outer: number,\r\n inner: number,\r\n x: number,\r\n y: number,\r\n): number {\r\n const dx = x - cx;\r\n const dy = y - cy;\r\n const r = Math.hypot(dx, dy);\r\n if (r < inner || r > outer) {\r\n return -1;\r\n }\r\n const total = values.reduce((s, v) => s + (v > 0 ? v : 0), 0);\r\n if (total <= 0) {\r\n return -1;\r\n }\r\n let angle = Math.atan2(dx, -dy);\r\n if (angle < 0) {\r\n angle += TAU;\r\n }\r\n let cursor = 0;\r\n for (let i = 0; i < values.length; i++) {\r\n if (!(values[i] > 0)) {\r\n continue;\r\n }\r\n cursor += (values[i] / total) * TAU;\r\n if (angle <= cursor + 1e-9) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n","import { afterNextRender, DestroyRef, inject } from '@angular/core';\r\nimport { NxeMessageService } from '@nexterajs/ui/core';\r\nimport { formatNumber, NXE_NUMBER_SEPARATORS, parseNumberFormat } from '@nexterajs/ui/intl';\r\n\r\n/** How many categorical colours the palette has (`--nxe-ui-chart-1` to `--nxe-ui-chart-8`). */\r\nexport const NXE_CHART_SLOTS = 8;\r\n\r\n/** The colour of the grouped \"Other\" remainder: a neutral, never a categorical slot. */\r\nexport const NXE_CHART_OTHER_COLOR = 'var(--nxe-ui-chart-other)';\r\n\r\n/**\r\n * The CSS colour of palette slot `index` (0-based). Slots are assigned in order and never cycled:\r\n * past the eighth there is no ninth hue, so the remainder takes the neutral `Other` colour.\r\n */\r\nexport function nxeChartColor(index: number): string {\r\n return index >= 0 && index < NXE_CHART_SLOTS ? `var(--nxe-ui-chart-${index + 1})` : NXE_CHART_OTHER_COLOR;\r\n}\r\n\r\n/** One data series of a line or area chart. */\r\nexport interface NxeCartesianSeries {\r\n /** Stable identity, kept when the legend hides the series; defaults to the name. */\r\n readonly key?: string;\r\n readonly name: string;\r\n /** One value per category, aligned by index. `null` or `undefined` leaves a gap. */\r\n readonly values: readonly (number | null | undefined)[];\r\n /** Overrides the palette slot (any CSS colour or `var(--nxe-ui-...)`). */\r\n readonly color?: string;\r\n}\r\n\r\n/** One entry of the legend. */\r\nexport interface NxeChartLegendItem {\r\n readonly key: string;\r\n readonly label: string;\r\n readonly color: string;\r\n readonly hidden: boolean;\r\n /** Formatted value shown after the label, if any. */\r\n readonly value?: string;\r\n}\r\n\r\n/** A row of the data table alternative. */\r\nexport interface NxeChartTableRow {\r\n readonly header: string;\r\n readonly cells: readonly string[];\r\n}\r\n\r\nlet sequence = 0;\r\n/** A document-unique id fragment for aria-describedby targets. */\r\nexport function nxeChartId(prefix: string): string {\r\n return `${prefix}-${++sequence}`;\r\n}\r\n\r\n/**\r\n * Number formatting for a chart: separators follow `NXE_NUMBER_SEPARATORS` (which, with\r\n * `provideNxeMessages({ separators: true })`, follows the active locale). Call inside a `computed`\r\n * or a template so a locale switch re-renders.\r\n */\r\nexport function nxeChartNumberFormatter(): (value: number, pattern: string) => string {\r\n const separators = inject(NXE_NUMBER_SEPARATORS);\r\n return (value, pattern) => formatNumber(value, parseNumberFormat(pattern), separators);\r\n}\r\n\r\n/** The message service, for a chart's strings and its locale. */\r\nexport function nxeChartMessages(): NxeMessageService {\r\n return inject(NxeMessageService);\r\n}\r\n\r\n/**\r\n * Reports the element's width now and whenever it changes (ResizeObserver, browser only). Call in\r\n * an injection context. No `effect()`: the observer writes straight into whatever signal the\r\n * callback sets.\r\n */\r\nexport function nxeObserveWidth(element: HTMLElement, onWidth: (width: number) => void): void {\r\n const destroyRef = inject(DestroyRef);\r\n afterNextRender(() => {\r\n onWidth(Math.round(element.getBoundingClientRect().width));\r\n if (typeof ResizeObserver === 'undefined') {\r\n return;\r\n }\r\n const observer = new ResizeObserver((entries) => {\r\n const width = entries[0]?.contentRect.width;\r\n if (typeof width === 'number') {\r\n onWidth(Math.round(width));\r\n }\r\n });\r\n observer.observe(element);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\nimport { NxeChartTableRow } from '../core/nxe-chart-shared';\r\n\r\n/**\r\n * The data behind a chart as a real table: the alternative for a reader who cannot see the marks.\r\n * It is a library-internal native table (the consuming app's own templates still avoid one). The\r\n * chart keeps it visually hidden, or shows it in place of the plot under \"View as table\".\r\n */\r\n@Component({\r\n selector: 'nxe-chart-data-table',\r\n templateUrl: './nxe-chart-data-table.component.html',\r\n styleUrl: './nxe-chart-data-table.component.scss',\r\n host: { class: 'nxe-chart-data-table' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeChartDataTableComponent {\r\n readonly caption = input('');\r\n /** Header of the first column (the category or segment). */\r\n readonly corner = input('');\r\n readonly columns = input<readonly string[]>([]);\r\n readonly rows = input<readonly NxeChartTableRow[]>([]);\r\n}\r\n","<table class=\"nxe-chart-data-table__table\">\r\n <caption>{{ caption() }}</caption>\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">{{ corner() }}</th>\r\n @for (column of columns(); track $index) {\r\n <th scope=\"col\">{{ column }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of rows(); track $index) {\r\n <tr>\r\n <th scope=\"row\">{{ row.header }}</th>\r\n @for (cell of row.cells; track $index) {\r\n <td>{{ cell }}</td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n</table>\r\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\r\nimport { NxeChartLegendItem } from '../core/nxe-chart-shared';\r\n\r\n/**\r\n * The legend of a chart: a swatch and a name per series or segment. Each entry is a toggle button\r\n * (`aria-pressed`, reachable and operable from the keyboard) that asks the chart to hide or show\r\n * that series. Colour never carries the identity alone: the name is always written.\r\n */\r\n@Component({\r\n selector: 'nxe-chart-legend',\r\n templateUrl: './nxe-chart-legend.component.html',\r\n styleUrl: './nxe-chart-legend.component.scss',\r\n host: { class: 'nxe-chart-legend' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeChartLegendComponent {\r\n readonly items = input<readonly NxeChartLegendItem[]>([]);\r\n /** Accessible name of the list. */\r\n readonly label = input('');\r\n /** `false` renders plain entries instead of toggle buttons. */\r\n readonly toggleable = input(true, { transform: booleanAttribute });\r\n /** Emits the key of the entry the user toggled. */\r\n readonly toggled = output<string>();\r\n}\r\n","<ul class=\"nxe-chart-legend__list\" [attr.aria-label]=\"label() || null\">\r\n @for (item of items(); track item.key) {\r\n <li class=\"nxe-chart-legend__entry\">\r\n @if (toggleable()) {\r\n <button\r\n type=\"button\"\r\n class=\"nxe-chart-legend__item\"\r\n [class.nxe-chart-legend__item--off]=\"item.hidden\"\r\n [attr.aria-pressed]=\"!item.hidden\"\r\n (click)=\"toggled.emit(item.key)\">\r\n <span class=\"nxe-chart-legend__swatch\" aria-hidden=\"true\" [style.--nxe-chart-swatch]=\"item.color\"></span>\r\n <span class=\"nxe-chart-legend__label\">{{ item.label }}</span>\r\n @if (item.value) {\r\n <span class=\"nxe-chart-legend__value\">{{ item.value }}</span>\r\n }\r\n </button>\r\n } @else {\r\n <span class=\"nxe-chart-legend__item\">\r\n <span class=\"nxe-chart-legend__swatch\" aria-hidden=\"true\" [style.--nxe-chart-swatch]=\"item.color\"></span>\r\n <span class=\"nxe-chart-legend__label\">{{ item.label }}</span>\r\n @if (item.value) {\r\n <span class=\"nxe-chart-legend__value\">{{ item.value }}</span>\r\n }\r\n </span>\r\n }\r\n </li>\r\n }\r\n</ul>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n numberAttribute,\r\n signal,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NxeEmptyStateComponent, NxeSkeletonComponent } from '@nexterajs/ui/display';\r\nimport { formatDisplay, NXE_DEFAULT_DISPLAY_FORMAT, parseDateValue } from '@nexterajs/ui/intl';\r\nimport { DateTime } from 'luxon';\r\nimport { areaPath, linePath, type NxeChartPoint, stackValues } from '../core/nxe-chart-geometry';\r\nimport { decimalsOf, labelIndexes, linearScale, nearestIndex, niceScale, patternForDecimals } from '../core/nxe-chart-scale';\r\nimport {\r\n nxeChartColor,\r\n nxeChartId,\r\n nxeChartMessages,\r\n nxeChartNumberFormatter,\r\n nxeObserveWidth,\r\n type NxeChartLegendItem,\r\n type NxeCartesianSeries,\r\n type NxeChartTableRow,\r\n} from '../core/nxe-chart-shared';\r\nimport { NxeChartDataTableComponent } from '../data-table/nxe-chart-data-table.component';\r\nimport { NxeChartLegendComponent } from '../legend/nxe-chart-legend.component';\r\n\r\n/** An x value: a label for a category axis, or a date for a time axis. */\r\nexport type NxeChartCategory = string | number | Date | DateTime;\r\n\r\n/** How the x axis places its points. */\r\nexport type NxeChartXType = 'category' | 'time';\r\n\r\ninterface LineView {\r\n readonly key: string;\r\n readonly name: string;\r\n readonly color: string;\r\n readonly line: string;\r\n readonly area: string;\r\n readonly markers: readonly { x: number; y: number; index: number }[];\r\n}\r\n\r\nconst MARGIN_TOP = 12;\r\nconst MARGIN_RIGHT = 16;\r\nconst MARGIN_BOTTOM = 30;\r\nconst INSET = 10;\r\nconst FALLBACK_WIDTH = 480;\r\nconst CHAR_WIDTH = 6.6;\r\n\r\n/**\r\n * `nxe-line-chart` draws one or more series as lines over a category or time x axis.\r\n *\r\n * ```html\r\n * <nxe-line-chart\r\n * heading=\"Purchases per month\"\r\n * [categories]=\"months\"\r\n * [series]=\"[{ name: 'Total', values: totals }]\"\r\n * xType=\"time\"\r\n * xFormat=\"MMM yyyy\" />\r\n * ```\r\n *\r\n * It is SVG rendered by the template from computed scales: no chart library. It follows its\r\n * container's width (ResizeObserver), takes colours from the `--nxe-ui-chart-1..8` tokens in\r\n * order (so light and dark both validate), writes numbers with `NXE_NUMBER_SEPARATORS` and dates\r\n * with Luxon in the active locale, leaves a gap where a value is `null`, and shows:\r\n *\r\n * - a legend (two series or more) whose entries hide and show a series from the keyboard;\r\n * - a crosshair tooltip on hover, and on focus: Tab to the plot, then Left, Right, Home, End and\r\n * Esc move through the points, and the values are announced;\r\n * - `role=\"img\"` with a text summary (range, first, last, lowest and highest per series), and the\r\n * data as a visually hidden table that the \"View as table\" button shows in place of the plot;\r\n * - `nxe-skeleton` while `loading`, and `nxe-empty-state` when there is nothing to draw.\r\n *\r\n * `area` fills under each line (`nxe-area-chart` is the same with `area` on); with `stacked` the\r\n * series stack and a missing value counts as 0. Categories must be in ascending order on a time\r\n * axis. Values are numbers in the unit of the axis: scale them first if the unit differs.\r\n */\r\n@Component({\r\n selector: 'nxe-line-chart',\r\n imports: [NxeChartLegendComponent, NxeChartDataTableComponent, NxeSkeletonComponent, NxeEmptyStateComponent],\r\n templateUrl: './nxe-line-chart.component.html',\r\n styleUrl: '../core/nxe-chart.scss',\r\n host: { class: 'nxe-chart nxe-line-chart' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeLineChartComponent {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n protected readonly messages = nxeChartMessages();\r\n private readonly formatter = nxeChartNumberFormatter();\r\n\r\n /** The series to draw, in palette order. Up to 8 take a palette colour; give more a `color`. */\r\n readonly series = input<readonly NxeCartesianSeries[]>([]);\r\n /** One entry per point along the x axis; a series' `values` line up with it by index. */\r\n readonly categories = input<readonly NxeChartCategory[]>([]);\r\n /** `category` spaces points evenly; `time` places them by date (Luxon parses strings, Dates and DateTimes). */\r\n readonly xType = input<NxeChartXType>('category');\r\n /** Luxon format of a date label, in the active locale. Default `dd-MMM-yyyy`. */\r\n readonly xFormat = input(NXE_DEFAULT_DISPLAY_FORMAT);\r\n /** Number pattern for values in the tooltip, summary and table. Default `#,##0.##`. */\r\n readonly valueFormat = input('#,##0.##');\r\n /** Number pattern for the y axis; by default as many decimals as the tick step needs. */\r\n readonly axisFormat = input<string | undefined>(undefined);\r\n /** About how many y ticks. */\r\n readonly yTicks = input(5, { transform: (v: unknown) => Math.max(2, Math.floor(numberAttribute(v, 5))) });\r\n /** Start the y axis at 0 when every value is positive. Areas always do. */\r\n readonly includeZero = input(true, { transform: booleanAttribute });\r\n /** Fill under each line. */\r\n readonly area = input(false, { transform: booleanAttribute });\r\n /** With `area`: stack the series instead of overlaying them. */\r\n readonly stacked = input(false, { transform: booleanAttribute });\r\n /** Visible title above the chart; also the start of its accessible summary. */\r\n readonly heading = input('');\r\n /** Extra sentence for the accessible summary, e.g. what to take away from the chart. */\r\n readonly description = input('');\r\n /** Height of the plot in px. */\r\n readonly height = input(280, { transform: (v: unknown) => Math.max(120, numberAttribute(v, 280)) });\r\n /** Fixed width in px; by default the chart fills its container. */\r\n readonly width = input<number | undefined, unknown>(undefined, {\r\n transform: (v: unknown) => (v === undefined || v === null || v === '' ? undefined : numberAttribute(v, FALLBACK_WIDTH)),\r\n });\r\n /** Show the skeleton instead of the plot. */\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n /** The legend: by default shown for two series or more. */\r\n readonly showLegend = input<boolean | 'auto'>('auto');\r\n /** Offer the \"View as table\" button. */\r\n readonly showTableToggle = input(true, { transform: booleanAttribute });\r\n /** Keys of the series the legend has hidden; two-way. */\r\n readonly hidden = model<readonly string[]>([]);\r\n\r\n /** `nxe-area-chart` turns this on. */\r\n protected readonly areaForced: boolean = false;\r\n\r\n protected readonly uid = nxeChartId('nxe-chart');\r\n private readonly measured = signal(0);\r\n protected readonly hoverIndex = signal<number | null>(null);\r\n protected readonly keyboardIndex = signal<number | null>(null);\r\n protected readonly tableShown = signal(false);\r\n\r\n constructor() {\r\n nxeObserveWidth(this.host, (w) => this.measured.set(w));\r\n }\r\n\r\n // ---- data ------------------------------------------------------------------------------\r\n\r\n private readonly isTime = computed(\r\n () =>\r\n this.xType() === 'time' &&\r\n this.categories().length > 0 &&\r\n this.categories().every((c) => this.toDate(c) !== null),\r\n );\r\n\r\n protected readonly isArea = computed(() => this.areaForced || this.area());\r\n protected readonly isStacked = computed(() => this.isArea() && this.stacked());\r\n\r\n /** Number of points along x. */\r\n protected readonly count = computed(() =>\r\n this.series().reduce((m, s) => Math.max(m, s.values.length), this.categories().length),\r\n );\r\n\r\n protected readonly labels = computed<string[]>(() => {\r\n const categories = this.categories();\r\n const locale = this.messages.locale();\r\n const format = this.xFormat();\r\n const time = this.isTime();\r\n return Array.from({ length: this.count() }, (_, i) => {\r\n const c = categories[i];\r\n if (c === undefined) {\r\n return String(i + 1);\r\n }\r\n if (time || c instanceof Date || DateTime.isDateTime(c)) {\r\n return formatDisplay(this.toDate(c), format, locale);\r\n }\r\n return String(c);\r\n });\r\n });\r\n\r\n private readonly xs = computed<number[]>(() => {\r\n const categories = this.categories();\r\n const time = this.isTime();\r\n return Array.from({ length: this.count() }, (_, i) => (time ? (this.toDate(categories[i])?.toMillis() ?? i) : i));\r\n });\r\n\r\n private readonly entries = computed(() => {\r\n const hidden = this.hidden();\r\n return this.series().map((s, slot) => {\r\n const key = s.key ?? s.name;\r\n return { s, key, slot, color: s.color ?? nxeChartColor(slot), hidden: hidden.includes(key) };\r\n });\r\n });\r\n\r\n private readonly visible = computed(() => this.entries().filter((e) => !e.hidden));\r\n\r\n protected readonly empty = computed(\r\n () => !this.series().some((s) => s.values.some((v) => typeof v === 'number' && isFinite(v))),\r\n );\r\n\r\n private readonly stack = computed(() =>\r\n this.isStacked() ? stackValues(this.visible().map((e) => e.s.values)) : [],\r\n );\r\n\r\n // ---- scales ----------------------------------------------------------------------------\r\n\r\n private readonly domain = computed(() => {\r\n let lo = Infinity;\r\n let hi = -Infinity;\r\n if (this.isStacked()) {\r\n lo = 0;\r\n for (const band of this.stack()) {\r\n for (const v of band.upper) {\r\n hi = Math.max(hi, v);\r\n }\r\n }\r\n } else {\r\n for (const e of this.visible()) {\r\n for (const v of e.s.values) {\r\n if (typeof v === 'number' && isFinite(v)) {\r\n lo = Math.min(lo, v);\r\n hi = Math.max(hi, v);\r\n }\r\n }\r\n }\r\n if (this.isArea() || (this.includeZero() && lo > 0)) {\r\n lo = Math.min(lo, 0);\r\n }\r\n if (this.isArea() && hi < 0) {\r\n hi = 0;\r\n }\r\n }\r\n return isFinite(lo) && isFinite(hi) ? niceScale(lo, hi, this.yTicks()) : niceScale(0, 1, this.yTicks());\r\n });\r\n\r\n private readonly axisPattern = computed(\r\n () => this.axisFormat() ?? patternForDecimals(decimalsOf(this.domain().step)),\r\n );\r\n\r\n protected readonly yLabels = computed(() => {\r\n const pattern = this.axisPattern();\r\n return this.domain().ticks.map((t) => this.formatter(t, pattern));\r\n });\r\n\r\n protected readonly svgWidth = computed(() => Math.max(160, this.width() ?? (this.measured() || FALLBACK_WIDTH)));\r\n protected readonly svgHeight = computed(() => this.height() + MARGIN_TOP + MARGIN_BOTTOM);\r\n\r\n protected readonly left = computed(\r\n () => Math.ceil(this.yLabels().reduce((m, l) => Math.max(m, l.length), 1) * CHAR_WIDTH) + 16,\r\n );\r\n protected readonly plotRight = computed(() => this.svgWidth() - MARGIN_RIGHT);\r\n protected readonly plotBottom = computed(() => MARGIN_TOP + this.height());\r\n\r\n private readonly xScale = computed(() => {\r\n const xs = this.xs();\r\n const lo = xs.length ? xs[0] : 0;\r\n const hi = xs.length ? xs[xs.length - 1] : 1;\r\n return linearScale(lo, hi, this.left() + INSET, this.plotRight() - INSET);\r\n });\r\n\r\n private readonly yScale = computed(() => {\r\n const d = this.domain();\r\n return linearScale(d.min, d.max, this.plotBottom(), MARGIN_TOP);\r\n });\r\n\r\n /** Pixel x of each point. */\r\n protected readonly xPx = computed(() => {\r\n const scale = this.xScale();\r\n return this.xs().map((x) => scale(x));\r\n });\r\n\r\n protected readonly yGrid = computed(() => {\r\n const scale = this.yScale();\r\n const labels = this.yLabels();\r\n return this.domain().ticks.map((tick, i) => ({ y: scale(tick), label: labels[i], zero: tick === 0 }));\r\n });\r\n\r\n protected readonly xTicks = computed(() => {\r\n const labels = this.labels();\r\n const px = this.xPx();\r\n const widest = labels.reduce((m, l) => Math.max(m, l.length), 1) * CHAR_WIDTH + 18;\r\n const room = Math.max(1, Math.floor((this.plotRight() - this.left()) / widest));\r\n return labelIndexes(labels.length, room).map((i) => ({ x: px[i], text: labels[i] }));\r\n });\r\n\r\n // ---- marks -----------------------------------------------------------------------------\r\n\r\n protected readonly lines = computed<LineView[]>(() => {\r\n const px = this.xPx();\r\n const y = this.yScale();\r\n const d = this.domain();\r\n const base = y(Math.min(Math.max(0, d.min), d.max));\r\n const stacked = this.isStacked();\r\n const stack = this.stack();\r\n const area = this.isArea();\r\n return this.visible().map((e, band) => {\r\n const top: (NxeChartPoint | null)[] = [];\r\n const bottom: (NxeChartPoint | null)[] = [];\r\n for (let i = 0; i < px.length; i++) {\r\n const v = e.s.values[i];\r\n if (stacked) {\r\n top.push({ x: px[i], y: y(stack[band].upper[i]) });\r\n bottom.push({ x: px[i], y: y(stack[band].lower[i]) });\r\n } else {\r\n top.push(typeof v === 'number' && isFinite(v) ? { x: px[i], y: y(v) } : null);\r\n }\r\n }\r\n const markers = top.flatMap((p, index) =>\r\n p && (!stacked || typeof e.s.values[index] === 'number') ? [{ x: p.x, y: p.y, index }] : [],\r\n );\r\n return {\r\n key: e.key,\r\n name: e.s.name,\r\n color: e.color,\r\n line: linePath(top),\r\n area: area ? areaPath(top, stacked ? bottom : base) : '',\r\n markers,\r\n };\r\n });\r\n });\r\n\r\n /** Markers on every point while there are few enough to tell apart; otherwise only the active one. */\r\n protected readonly showAllMarkers = computed(() => {\r\n const n = this.count();\r\n return n > 0 && (this.plotRight() - this.left()) / Math.max(1, n - 1) >= 18;\r\n });\r\n\r\n // ---- interaction -----------------------------------------------------------------------\r\n\r\n protected readonly activeIndex = computed(() => this.hoverIndex() ?? this.keyboardIndex());\r\n\r\n protected readonly tooltip = computed(() => {\r\n const index = this.activeIndex();\r\n if (index === null || index >= this.count()) {\r\n return null;\r\n }\r\n const pattern = this.valueFormat();\r\n const noValue = this.messages.t('display.noValue');\r\n const rows = this.visible().map((e) => {\r\n const v = e.s.values[index];\r\n return {\r\n key: e.key,\r\n name: e.s.name,\r\n color: e.color,\r\n value: typeof v === 'number' && isFinite(v) ? this.formatter(v, pattern) : noValue,\r\n };\r\n });\r\n const x = this.xPx()[index];\r\n const width = this.svgWidth();\r\n const align = x < 100 ? 'start' : x > width - 100 ? 'end' : 'center';\r\n return { title: this.labels()[index], rows, x, index, align };\r\n });\r\n\r\n /** What a screen reader hears when keyboard focus lands on a point. */\r\n protected readonly announcement = computed(() => {\r\n const t = this.keyboardIndex() === null ? null : this.tooltip();\r\n return t ? `${t.title}: ${t.rows.map((r) => `${r.name} ${r.value}`).join(', ')}` : '';\r\n });\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\r\n const i = nearestIndex(this.xPx(), event.clientX - rect.left);\r\n this.hoverIndex.set(i < 0 ? null : i);\r\n }\r\n\r\n protected onPointerLeave(): void {\r\n this.hoverIndex.set(null);\r\n }\r\n\r\n protected onFocus(): void {\r\n if (this.keyboardIndex() === null && this.hoverIndex() === null) {\r\n this.keyboardIndex.set(0);\r\n }\r\n }\r\n\r\n protected onBlur(): void {\r\n this.keyboardIndex.set(null);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const last = this.count() - 1;\r\n const current = this.keyboardIndex() ?? 0;\r\n let next: number | null;\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n case 'ArrowDown':\r\n next = Math.min(last, current + 1);\r\n break;\r\n case 'ArrowLeft':\r\n case 'ArrowUp':\r\n next = Math.max(0, current - 1);\r\n break;\r\n case 'Home':\r\n next = 0;\r\n break;\r\n case 'End':\r\n next = last;\r\n break;\r\n case 'Escape':\r\n next = null;\r\n break;\r\n default:\r\n return;\r\n }\r\n event.preventDefault();\r\n this.hoverIndex.set(null);\r\n this.keyboardIndex.set(next);\r\n }\r\n\r\n // ---- legend, table, summary ------------------------------------------------------------\r\n\r\n protected readonly legendItems = computed<NxeChartLegendItem[]>(() =>\r\n this.entries().map((e) => ({ key: e.key, label: e.s.name, color: e.color, hidden: e.hidden })),\r\n );\r\n\r\n protected readonly legendShown = computed(() => {\r\n const mode = this.showLegend();\r\n return mode === 'auto' ? this.series().length > 1 : mode;\r\n });\r\n\r\n protected toggleSeries(key: string): void {\r\n const hidden = this.hidden();\r\n this.hidden.set(hidden.includes(key) ? hidden.filter((k) => k !== key) : [...hidden, key]);\r\n }\r\n\r\n protected readonly tableColumns = computed(() => this.series().map((s) => s.name));\r\n\r\n protected readonly tableRows = computed<NxeChartTableRow[]>(() => {\r\n const labels = this.labels();\r\n const pattern = this.valueFormat();\r\n const noValue = this.messages.t('display.noValue');\r\n return labels.map((header, i) => ({\r\n header,\r\n cells: this.series().map((s) => {\r\n const v = s.values[i];\r\n return typeof v === 'number' && isFinite(v) ? this.formatter(v, pattern) : noValue;\r\n }),\r\n }));\r\n });\r\n\r\n protected readonly summary = computed(() => {\r\n const m = this.messages;\r\n const labels = this.labels();\r\n const pattern = this.valueFormat();\r\n const kind = this.isStacked()\r\n ? 'charts.summary.stackedArea'\r\n : this.isArea()\r\n ? 'charts.summary.area'\r\n : 'charts.summary.line';\r\n const parts: string[] = [];\r\n if (this.heading()) {\r\n parts.push(`${this.heading()}.`);\r\n }\r\n parts.push(m.t(kind, this.series().length, labels.length, labels[0] ?? '', labels[labels.length - 1] ?? ''));\r\n for (const s of this.series()) {\r\n const nums = s.values.filter((v): v is number => typeof v === 'number' && isFinite(v));\r\n if (nums.length) {\r\n const f = (v: number) => this.formatter(v, pattern);\r\n parts.push(\r\n m.t('charts.summary.series', s.name, f(nums[0]), f(nums[nums.length - 1]), f(Math.min(...nums)), f(Math.max(...nums))),\r\n );\r\n }\r\n }\r\n if (this.description()) {\r\n parts.push(this.description());\r\n }\r\n return parts.join(' ');\r\n });\r\n\r\n protected toggleTable(): void {\r\n this.tableShown.update((v) => !v);\r\n }\r\n\r\n private toDate(value: unknown): DateTime | null {\r\n if (typeof value === 'number') {\r\n const dt = DateTime.fromMillis(value);\r\n return dt.isValid ? dt : null;\r\n }\r\n return parseDateValue(value);\r\n }\r\n}\r\n","<figure class=\"nxe-chart__figure\" [attr.aria-busy]=\"loading() ? 'true' : null\">\r\n @if (heading()) {\r\n <figcaption class=\"nxe-chart__heading\">{{ heading() }}</figcaption>\r\n }\r\n @if (loading()) {\r\n <nxe-skeleton variant=\"rect\" width=\"100%\" [height]=\"svgHeight()\" />\r\n } @else if (empty()) {\r\n <nxe-empty-state class=\"nxe-chart__empty\" [heading]=\"messages.t('charts.empty')\" [headingLevel]=\"4\" />\r\n } @else {\r\n @if (showTableToggle()) {\r\n <div class=\"nxe-chart__toolbar\">\r\n <button\r\n type=\"button\"\r\n class=\"nxe-chart__toggle\"\r\n [attr.aria-controls]=\"uid + '-table'\"\r\n (click)=\"toggleTable()\">\r\n {{ messages.t(tableShown() ? 'charts.viewAsChart' : 'charts.viewAsTable') }}\r\n </button>\r\n </div>\r\n }\r\n <div class=\"nxe-chart__stage\" [hidden]=\"tableShown()\">\r\n <svg\r\n class=\"nxe-chart__svg\"\r\n role=\"img\"\r\n [attr.aria-label]=\"summary()\"\r\n [attr.width]=\"svgWidth()\"\r\n [attr.height]=\"svgHeight()\"\r\n [attr.viewBox]=\"'0 0 ' + svgWidth() + ' ' + svgHeight()\">\r\n @for (g of yGrid(); track $index) {\r\n <line\r\n class=\"nxe-chart__grid\"\r\n [class.nxe-chart__grid--zero]=\"g.zero\"\r\n [attr.x1]=\"left()\"\r\n [attr.x2]=\"plotRight()\"\r\n [attr.y1]=\"g.y\"\r\n [attr.y2]=\"g.y\" />\r\n <text class=\"nxe-chart__tick\" text-anchor=\"end\" [attr.x]=\"left() - 8\" [attr.y]=\"g.y\" dy=\"0.32em\">{{ g.label }}</text>\r\n }\r\n @for (t of xTicks(); track $index) {\r\n <text class=\"nxe-chart__tick\" text-anchor=\"middle\" [attr.x]=\"t.x\" [attr.y]=\"plotBottom() + 18\">{{ t.text }}</text>\r\n }\r\n @for (l of lines(); track l.key) {\r\n @if (l.area) {\r\n <path\r\n class=\"nxe-chart__area\"\r\n [class.nxe-chart__area--stacked]=\"isStacked()\"\r\n [attr.d]=\"l.area\"\r\n [style.fill]=\"l.color\" />\r\n }\r\n }\r\n @for (l of lines(); track l.key) {\r\n <path class=\"nxe-chart__line\" [attr.d]=\"l.line\" [style.stroke]=\"l.color\" />\r\n @for (m of l.markers; track m.index) {\r\n @if (showAllMarkers() || l.markers.length === 1 || m.index === activeIndex()) {\r\n <circle class=\"nxe-chart__marker\" [attr.cx]=\"m.x\" [attr.cy]=\"m.y\" r=\"4\" [style.fill]=\"l.color\" />\r\n }\r\n }\r\n }\r\n @if (tooltip(); as tip) {\r\n <line class=\"nxe-chart__crosshair\" [attr.x1]=\"tip.x\" [attr.x2]=\"tip.x\" [attr.y1]=\"marginTop\" [attr.y2]=\"plotBottom()\" />\r\n @for (l of lines(); track l.key) {\r\n @for (m of l.markers; track m.index) {\r\n @if (m.index === tip.index) {\r\n <circle class=\"nxe-chart__marker nxe-chart__marker--active\" [attr.cx]=\"m.x\" [attr.cy]=\"m.y\" r=\"5\" [style.fill]=\"l.color\" />\r\n }\r\n }\r\n }\r\n }\r\n </svg>\r\n <div\r\n class=\"nxe-chart__focus\"\r\n role=\"group\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"messages.t('charts.navigate')\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerleave)=\"onPointerLeave()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"></div>\r\n @if (tooltip(); as tip) {\r\n <div\r\n class=\"nxe-chart__tooltip\"\r\n role=\"tooltip\"\r\n [class.nxe-chart__tooltip--start]=\"tip.align === 'start'\"\r\n [class.nxe-chart__tooltip--end]=\"tip.align === 'end'\"\r\n [style.left.px]=\"tip.x\"\r\n [style.top.px]=\"marginTop\">\r\n <div class=\"nxe-chart__tooltip-title\">{{ tip.title }}</div>\r\n @for (r of tip.rows; track r.key) {\r\n <div class=\"nxe-chart__tooltip-row\">\r\n <span class=\"nxe-chart__swatch\" aria-hidden=\"true\" [style.background]=\"r.color\"></span>\r\n <span class=\"nxe-chart__tooltip-name\">{{ r.name }}</span>\r\n <span class=\"nxe-chart__tooltip-value\">{{ r.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div class=\"nxe-chart__sr\" aria-live=\"polite\" aria-atomic=\"true\">{{ announcement() }}</div>\r\n </div>\r\n <div [id]=\"uid + '-table'\" [class.nxe-chart__sr]=\"!tableShown()\">\r\n <nxe-chart-data-table\r\n [caption]=\"heading()\"\r\n [corner]=\"messages.t('charts.table.category')\"\r\n [columns]=\"tableColumns()\"\r\n [rows]=\"tableRows()\" />\r\n </div>\r\n @if (legendShown()) {\r\n <nxe-chart-legend [items]=\"legendItems()\" [label]=\"messages.t('charts.legend')\" (toggled)=\"toggleSeries($event)\" />\r\n }\r\n }\r\n</figure>\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\nimport { NxeEmptyStateComponent, NxeSkeletonComponent } from '@nexterajs/ui/display';\r\nimport { NxeChartDataTableComponent } from '../data-table/nxe-chart-data-table.component';\r\nimport { NxeChartLegendComponent } from '../legend/nxe-chart-legend.component';\r\nimport { NxeLineChartComponent } from '../line-chart/nxe-line-chart.component';\r\n\r\n/**\r\n * `nxe-area-chart` is `nxe-line-chart` with the area under each line filled. It takes every input of\r\n * the line chart; add `stacked` to stack the series (a missing value then counts as 0).\r\n *\r\n * ```html\r\n * <nxe-area-chart heading=\"Spend by month\" [categories]=\"months\" [series]=\"series\" stacked />\r\n * ```\r\n */\r\n@Component({\r\n selector: 'nxe-area-chart',\r\n imports: [NxeChartLegendComponent, NxeChartDataTableComponent, NxeSkeletonComponent, NxeEmptyStateComponent],\r\n templateUrl: '../line-chart/nxe-line-chart.component.html',\r\n styleUrl: '../core/nxe-chart.scss',\r\n host: { class: 'nxe-chart nxe-area-chart' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeAreaChartComponent extends NxeLineChartComponent {\r\n protected override readonly areaForced: boolean = true;\r\n}\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n numberAttribute,\r\n signal,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NxeEmptyStateComponent, NxeSkeletonComponent } from '@nexterajs/ui/display';\r\nimport { donutArcs, donutHit, groupOther, type NxeDonutDatum } from '../core/nxe-chart-geometry';\r\nimport {\r\n NXE_CHART_OTHER_COLOR,\r\n nxeChartColor,\r\n nxeChartId,\r\n nxeChartMessages,\r\n nxeChartNumberFormatter,\r\n nxeObserveWidth,\r\n type NxeChartLegendItem,\r\n type NxeChartTableRow,\r\n} from '../core/nxe-chart-shared';\r\nimport { NxeChartDataTableComponent } from '../data-table/nxe-chart-data-table.component';\r\nimport { NxeChartLegendComponent } from '../legend/nxe-chart-legend.component';\r\n\r\ninterface Segment {\r\n readonly key: string;\r\n readonly label: string;\r\n readonly value: number;\r\n readonly color: string;\r\n readonly hidden: boolean;\r\n}\r\n\r\nconst INNER_RATIO = 0.64;\r\nconst GAP = 2;\r\n\r\n/**\r\n * `nxe-donut-chart` shows how a total divides into parts.\r\n *\r\n * ```html\r\n * <nxe-donut-chart\r\n * heading=\"Spend by supplier\"\r\n * [data]=\"[{ label: 'PT Maju', value: 420 }, { label: 'CV Sinar', value: 180 }]\"\r\n * [maxSegments]=\"6\" />\r\n * ```\r\n *\r\n * Segments take the `--nxe-ui-chart-1..8` colours in order (or a `color` of their own, e.g. a status\r\n * family `var(--nxe-ui-status-success-fg)`), separated by a 2px surface gap. When there are more than\r\n * `maxSegments`, the smallest fold into one \"Other\" segment in a neutral colour. The centre shows\r\n * the total of the visible segments. The legend lists each segment with its value and share and\r\n * toggles it (keyboard accessible); hover or arrow-key focus on the ring shows a tooltip. It\r\n * announces itself as an image with a summary, keeps a visually hidden data table (shown by \"View\r\n * as table\"), and uses `nxe-skeleton` and `nxe-empty-state` for loading and no data.\r\n *\r\n * A donut is for a handful of parts of one whole: past six or so, use a bar chart.\r\n */\r\n@Component({\r\n selector: 'nxe-donut-chart',\r\n imports: [NxeChartLegendComponent, NxeChartDataTableComponent, NxeSkeletonComponent, NxeEmptyStateComponent],\r\n templateUrl: './nxe-donut-chart.component.html',\r\n styleUrls: ['../core/nxe-chart.scss', './nxe-donut-chart.component.scss'],\r\n host: { class: 'nxe-chart nxe-donut-chart' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeDonutChartComponent {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n protected readonly messages = nxeChartMessages();\r\n private readonly formatter = nxeChartNumberFormatter();\r\n\r\n /** The parts. Zero, negative and non-finite values are left out. */\r\n readonly data = input<readonly NxeDonutDatum[]>([]);\r\n /** Most segments shown; the rest fold into \"Other\". At most 9 (eight colours and Other). */\r\n readonly maxSegments = input(6, {\r\n transform: (v: unknown) => Math.min(9, Math.max(2, Math.floor(numberAttribute(v, 6)))),\r\n });\r\n /** Number pattern for values. Default `#,##0.##`. */\r\n readonly valueFormat = input('#,##0.##');\r\n /** Decimal places of the percentages. */\r\n readonly percentDecimals = input(1, {\r\n transform: (v: unknown) => Math.min(4, Math.max(0, Math.floor(numberAttribute(v, 1)))),\r\n });\r\n /** Visible title above the chart; also the start of its accessible summary. */\r\n readonly heading = input('');\r\n /** Extra sentence for the accessible summary. */\r\n readonly description = input('');\r\n /** Diameter of the ring in px; it shrinks to fit a narrower container. */\r\n readonly size = input(220, { transform: (v: unknown) => Math.max(96, numberAttribute(v, 220)) });\r\n /** Text under the total in the centre. Default: the message \"Total\". */\r\n readonly totalLabel = input<string | undefined>(undefined);\r\n /** Show the total in the centre. */\r\n readonly showTotal = input(true, { transform: booleanAttribute });\r\n /** Show the legend (value and share per segment, and the toggles). */\r\n readonly showLegend = input(true, { transform: booleanAttribute });\r\n /** Show the skeleton instead of the ring. */\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n /** Offer the \"View as table\" button. */\r\n readonly showTableToggle = input(true, { transform: booleanAttribute });\r\n /** Keys of the segments the legend has hidden; two-way. */\r\n readonly hidden = model<readonly string[]>([]);\r\n\r\n protected readonly uid = nxeChartId('nxe-chart');\r\n private readonly measured = signal(0);\r\n protected readonly hoverIndex = signal<number | null>(null);\r\n protected readonly keyboardIndex = signal<number | null>(null);\r\n protected readonly pointer = signal<{ x: number; y: number } | null>(null);\r\n protected readonly tableShown = signal(false);\r\n\r\n constructor() {\r\n nxeObserveWidth(this.host, (w) => this.measured.set(w));\r\n }\r\n\r\n // ---- data ------------------------------------------------------------------------------\r\n\r\n /** Kept segments plus the \"Other\" remainder; colours follow position, so hiding repaints nothing. */\r\n protected readonly all = computed<Segment[]>(() => {\r\n const grouped = groupOther(this.data(), this.maxSegments(), this.messages.t('charts.other'));\r\n const hidden = this.hidden();\r\n return grouped.map((d, i) => {\r\n const key = d.key ?? d.label;\r\n return {\r\n key,\r\n label: d.label,\r\n value: d.value,\r\n color: d.color ?? (d.other ? NXE_CHART_OTHER_COLOR : nxeChartColor(i)),\r\n hidden: hidden.includes(key),\r\n };\r\n });\r\n });\r\n\r\n protected readonly shown = computed(() => this.all().filter((s) => !s.hidden));\r\n protected readonly total = computed(() => this.shown().reduce((s, x) => s + x.value, 0));\r\n private readonly grandTotal = computed(() => this.all().reduce((s, x) => s + x.value, 0));\r\n protected readonly empty = computed(() => this.all().length === 0);\r\n\r\n private pct(value: number, total: number): string {\r\n const decimals = this.percentDecimals();\r\n const pattern = decimals > 0 ? `#,##0.${'0'.repeat(decimals)}` : '#,##0';\r\n return `${this.formatter(total > 0 ? (value / total) * 100 : 0, pattern)}%`;\r\n }\r\n\r\n // ---- geometry --------------------------------------------------------------------------\r\n\r\n protected readonly diameter = computed(() => {\r\n const available = this.measured();\r\n return Math.round(available > 0 ? Math.min(this.size(), available) : this.size());\r\n });\r\n private readonly outer = computed(() => this.diameter() / 2 - 2);\r\n private readonly inner = computed(() => this.outer() * INNER_RATIO);\r\n\r\n protected readonly arcs = computed(() => {\r\n const d = this.diameter() / 2;\r\n const arcs = donutArcs(\r\n this.shown().map((s) => s.value),\r\n d,\r\n d,\r\n this.outer(),\r\n this.inner(),\r\n GAP,\r\n );\r\n return this.shown().map((s, i) => ({ ...s, arc: arcs[i] }));\r\n });\r\n\r\n protected readonly totalText = computed(() => this.formatter(this.total(), this.valueFormat()));\r\n protected readonly totalCaption = computed(() => this.totalLabel() ?? this.messages.t('charts.total'));\r\n\r\n // ---- interaction -----------------------------------------------------------------------\r\n\r\n protected readonly activeIndex = computed(() => this.hoverIndex() ?? this.keyboardIndex());\r\n\r\n protected readonly tooltip = computed(() => {\r\n const i = this.activeIndex();\r\n const s = i === null ? undefined : this.arcs()[i];\r\n if (!s || !s.arc) {\r\n return null;\r\n }\r\n const point = this.hoverIndex() !== null ? (this.pointer() ?? s.arc.centroid) : s.arc.centroid;\r\n return {\r\n label: s.label,\r\n color: s.color,\r\n value: this.formatter(s.value, this.valueFormat()),\r\n share: this.pct(s.value, this.total()),\r\n x: point.x,\r\n y: point.y,\r\n };\r\n });\r\n\r\n protected readonly announcement = computed(() => {\r\n const t = this.keyboardIndex() === null ? null : this.tooltip();\r\n return t ? this.messages.t('charts.summary.segment', t.label, t.value, t.share) : '';\r\n });\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\r\n const x = event.clientX - rect.left;\r\n const y = event.clientY - rect.top;\r\n const d = this.diameter() / 2;\r\n const i = donutHit(\r\n this.shown().map((s) => s.value),\r\n d,\r\n d,\r\n this.outer(),\r\n this.inner(),\r\n x,\r\n y,\r\n );\r\n this.pointer.set({ x, y });\r\n this.hoverIndex.set(i < 0 ? null : i);\r\n }\r\n\r\n protected onPointerLeave(): void {\r\n this.hoverIndex.set(null);\r\n this.pointer.set(null);\r\n }\r\n\r\n protected onFocus(): void {\r\n if (this.keyboardIndex() === null && this.hoverIndex() === null && this.shown().length) {\r\n this.keyboardIndex.set(0);\r\n }\r\n }\r\n\r\n protected onBlur(): void {\r\n this.keyboardIndex.set(null);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const n = this.shown().length;\r\n if (n === 0) {\r\n return;\r\n }\r\n const current = this.keyboardIndex() ?? 0;\r\n let next: number | null;\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n case 'ArrowDown':\r\n next = (current + 1) % n;\r\n break;\r\n case 'ArrowLeft':\r\n case 'ArrowUp':\r\n next = (current - 1 + n) % n;\r\n break;\r\n case 'Home':\r\n next = 0;\r\n break;\r\n case 'End':\r\n next = n - 1;\r\n break;\r\n case 'Escape':\r\n next = null;\r\n break;\r\n default:\r\n return;\r\n }\r\n event.preventDefault();\r\n this.hoverIndex.set(null);\r\n this.keyboardIndex.set(next);\r\n }\r\n\r\n // ---- legend, table, summary ------------------------------------------------------------\r\n\r\n protected readonly legendItems = computed<NxeChartLegendItem[]>(() => {\r\n const total = this.total();\r\n const pattern = this.valueFormat();\r\n return this.all().map((s) => ({\r\n key: s.key,\r\n label: s.label,\r\n color: s.color,\r\n hidden: s.hidden,\r\n value: s.hidden ? undefined : `${this.formatter(s.value, pattern)} · ${this.pct(s.value, total)}`,\r\n }));\r\n });\r\n\r\n protected toggleSegment(key: string): void {\r\n const hidden = this.hidden();\r\n this.hidden.set(hidden.includes(key) ? hidden.filter((k) => k !== key) : [...hidden, key]);\r\n }\r\n\r\n protected readonly tableRows = computed<NxeChartTableRow[]>(() => {\r\n const grand = this.grandTotal();\r\n const pattern = this.valueFormat();\r\n return this.all().map((s) => ({\r\n header: s.label,\r\n cells: [this.formatter(s.value, pattern), this.pct(s.value, grand)],\r\n }));\r\n });\r\n\r\n protected readonly tableColumns = computed(() => [\r\n this.messages.t('charts.table.value'),\r\n this.messages.t('charts.table.share'),\r\n ]);\r\n\r\n protected readonly summary = computed(() => {\r\n const m = this.messages;\r\n const total = this.total();\r\n const pattern = this.valueFormat();\r\n const parts: string[] = [];\r\n if (this.heading()) {\r\n parts.push(`${this.heading()}.`);\r\n }\r\n parts.push(m.t('charts.summary.donut', this.shown().length, this.formatter(total, pattern)));\r\n for (const s of this.shown()) {\r\n parts.push(m.t('charts.summary.segment', s.label, this.formatter(s.value, pattern), this.pct(s.value, total)));\r\n }\r\n if (this.description()) {\r\n parts.push(this.description());\r\n }\r\n return parts.join(' ');\r\n });\r\n\r\n protected toggleTable(): void {\r\n this.tableShown.update((v) => !v);\r\n }\r\n}\r\n","<figure class=\"nxe-chart__figure\" [attr.aria-busy]=\"loading() ? 'true' : null\">\r\n @if (heading()) {\r\n <figcaption class=\"nxe-chart__heading\">{{ heading() }}</figcaption>\r\n }\r\n @if (loading()) {\r\n <nxe-skeleton variant=\"circle\" [width]=\"diameter()\" />\r\n } @else if (empty()) {\r\n <nxe-empty-state class=\"nxe-chart__empty\" [heading]=\"messages.t('charts.empty')\" [headingLevel]=\"4\" />\r\n } @else {\r\n @if (showTableToggle()) {\r\n <div class=\"nxe-chart__toolbar\">\r\n <button\r\n type=\"button\"\r\n class=\"nxe-chart__toggle\"\r\n [attr.aria-controls]=\"uid + '-table'\"\r\n (click)=\"toggleTable()\">\r\n {{ messages.t(tableShown() ? 'charts.viewAsChart' : 'charts.viewAsTable') }}\r\n </button>\r\n </div>\r\n }\r\n <div class=\"nxe-donut-chart__layout\" [hidden]=\"tableShown()\">\r\n <div class=\"nxe-donut-chart__plot nxe-chart__stage\" [style.width.px]=\"diameter()\" [style.height.px]=\"diameter()\">\r\n <svg\r\n class=\"nxe-chart__svg\"\r\n role=\"img\"\r\n [attr.aria-label]=\"summary()\"\r\n [attr.width]=\"diameter()\"\r\n [attr.height]=\"diameter()\"\r\n [attr.viewBox]=\"'0 0 ' + diameter() + ' ' + diameter()\">\r\n @for (s of arcs(); track s.key; let i = $index) {\r\n @if (s.arc) {\r\n <path\r\n class=\"nxe-donut-chart__segment\"\r\n [class.nxe-donut-chart__segment--dim]=\"activeIndex() !== null && activeIndex() !== i\"\r\n fill-rule=\"evenodd\"\r\n [attr.d]=\"s.arc.path\"\r\n [style.fill]=\"s.color\" />\r\n }\r\n }\r\n </svg>\r\n @if (showTotal()) {\r\n <div class=\"nxe-donut-chart__centre\" aria-hidden=\"true\">\r\n <span class=\"nxe-donut-chart__total-value\">{{ totalText() }}</span>\r\n <span class=\"nxe-donut-chart__total-label\">{{ totalCaption() }}</span>\r\n </div>\r\n }\r\n <div\r\n class=\"nxe-chart__focus\"\r\n role=\"group\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"messages.t('charts.navigateSegments')\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerleave)=\"onPointerLeave()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"></div>\r\n @if (tooltip(); as tip) {\r\n <div\r\n class=\"nxe-chart__tooltip nxe-donut-chart__tooltip\"\r\n role=\"tooltip\"\r\n [style.left.px]=\"tip.x\"\r\n [style.top.px]=\"tip.y - 12\">\r\n <div class=\"nxe-chart__tooltip-row\">\r\n <span class=\"nxe-chart__swatch\" aria-hidden=\"true\" [style.background]=\"tip.color\"></span>\r\n <span class=\"nxe-chart__tooltip-name\">{{ tip.label }}</span>\r\n </div>\r\n <div class=\"nxe-chart__tooltip-row\">\r\n <span class=\"nxe-chart__tooltip-value\">{{ tip.value }}</span>\r\n <span class=\"nxe-chart__tooltip-name\">{{ tip.share }}</span>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"nxe-chart__sr\" aria-live=\"polite\" aria-atomic=\"true\">{{ announcement() }}</div>\r\n </div>\r\n @if (showLegend()) {\r\n <nxe-chart-legend\r\n class=\"nxe-donut-chart__legend\"\r\n [items]=\"legendItems()\"\r\n [label]=\"messages.t('charts.legend')\"\r\n (toggled)=\"toggleSegment($event)\" />\r\n }\r\n </div>\r\n <div [id]=\"uid + '-table'\" [class.nxe-chart__sr]=\"!tableShown()\">\r\n <nxe-chart-data-table\r\n [caption]=\"heading()\"\r\n [corner]=\"messages.t('charts.table.segment')\"\r\n [columns]=\"tableColumns()\"\r\n [rows]=\"tableRows()\" />\r\n </div>\r\n }\r\n</figure>\r\n","// @nexterajs/ui/charts — public API.\r\nexport * from './lib/core/nxe-chart-scale';\r\nexport * from './lib/core/nxe-chart-geometry';\r\nexport {\r\n NXE_CHART_OTHER_COLOR,\r\n NXE_CHART_SLOTS,\r\n nxeChartColor,\r\n type NxeChartLegendItem,\r\n type NxeCartesianSeries,\r\n type NxeChartTableRow,\r\n} from './lib/core/nxe-chart-shared';\r\nexport * from './lib/line-chart/nxe-line-chart.component';\r\nexport * from './lib/area-chart/nxe-area-chart.component';\r\nexport * from './lib/donut-chart/nxe-donut-chart.component';\r\nexport * from './lib/legend/nxe-chart-legend.component';\r\nexport * from './lib/data-table/nxe-chart-data-table.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|