yukit-web 0.6.1 → 0.6.4
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 +97 -10
- package/fesm2022/yukit-web-chart.mjs +650 -0
- package/fesm2022/yukit-web-chart.mjs.map +1 -0
- package/fesm2022/yukit-web.mjs +116 -72
- package/fesm2022/yukit-web.mjs.map +1 -1
- package/package.json +15 -1
- package/src/lib/theme/tokens/color.css +23 -0
- package/types/yukit-web-chart.d.ts +219 -0
- package/types/yukit-web.d.ts +28 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yukit-web-chart.mjs","sources":["../../../projects/yukit-web/chart/src/lib/chart.interface.ts","../../../projects/yukit-web/chart/src/lib/layouts/chart-geometry.ts","../../../projects/yukit-web/chart/src/lib/layouts/cartesian-axis.ts","../../../projects/yukit-web/chart/src/lib/layouts/cartesian-values.ts","../../../projects/yukit-web/chart/src/lib/layouts/cartesian.layout.ts","../../../projects/yukit-web/chart/src/lib/layouts/pie.layout.ts","../../../projects/yukit-web/chart/src/lib/chart.registry.ts","../../../projects/yukit-web/chart/src/lib/chart-size.ts","../../../projects/yukit-web/chart/src/lib/chart.variants.ts","../../../projects/yukit-web/chart/src/lib/chart.component.ts","../../../projects/yukit-web/chart/src/lib/chart.component.html","../../../projects/yukit-web/chart/src/yukit-web-chart.ts"],"sourcesContent":["/** Theme token a series is painted with; `chart-n` resolves to the `--chart-n` custom property of `yukit-web/theme.css`. */\nexport type YuwChartColorDto =\n 'chart-1' | 'chart-2' | 'chart-3' | 'chart-4' | 'chart-5' | 'chart-6' | 'chart-7' | 'chart-8';\n\n/** Every chart token, in palette order. */\nexport const YUW_CHART_COLORS: readonly YuwChartColorDto[] = [\n 'chart-1',\n 'chart-2',\n 'chart-3',\n 'chart-4',\n 'chart-5',\n 'chart-6',\n 'chart-7',\n 'chart-8',\n];\n\n/**\n * How one series is shown: its label, already translated by the consumer, and its color token.\n */\nexport interface YuwChartSeriesDto {\n readonly color: YuwChartColorDto;\n readonly label: string;\n}\n\n/**\n * Series of a chart keyed by the data field holding their values. The key order is the drawing, stacking, legend\n * and tooltip order.\n */\nexport type YuwChartConfigDto = Readonly<Record<string, YuwChartSeriesDto>>;\n\n/** One data row: the category under `categoryKey` and one number per series key. */\nexport type YuwChartRowDto = Readonly<Record<string, unknown>>;\n\n/**\n * Chart kind. Bars group their series side by side unless the kind is `-stacked`; `bar-horizontal` lays the categories\n * on the vertical axis. `pie` and `donut` draw one slice per series, its value summed across every row.\n */\nexport type YuwChartKindDto =\n | 'area'\n | 'area-stacked'\n | 'bar'\n | 'bar-horizontal'\n | 'bar-horizontal-stacked'\n | 'bar-stacked'\n | 'donut'\n | 'line'\n | 'pie';\n\n/** Turns a value into the text shown on axes, tooltips and the accessible table, e.g. a localized currency. */\nexport type YuwChartValueFormatDto = (value: number) => string;\n\n/** Turns the value under `categoryKey` into its label, e.g. a localized month name. */\nexport type YuwChartCategoryFormatDto = (category: unknown) => string;\n\n/** Color token of the series at `index`, cycling through the palette: builds a config for a dynamic set of series. */\nexport function yuwChartColorAt(index: number): YuwChartColorDto {\n const count = YUW_CHART_COLORS.length;\n\n return YUW_CHART_COLORS[((index % count) + count) % count];\n}\n","import type { YuwChartColorDto, YuwChartConfigDto, YuwChartRowDto } from '../chart.interface';\nimport type { YuwChartScene, YuwChartTable } from '../chart-scene.interface';\n\n/** Average advance of a glyph at the `text-xs` size axis labels use, to reserve room without measuring text. */\nexport const CHART_CHAR_WIDTH = 7;\n\nexport interface YuwChartSeries {\n readonly color: string;\n readonly key: string;\n readonly label: string;\n}\n\nexport function cssColor(color: YuwChartColorDto): string {\n return `var(--${color})`;\n}\n\nexport function seriesOf(config: YuwChartConfigDto): YuwChartSeries[] {\n return Object.entries(config).map(([key, series]) => ({ key, label: series.label, color: cssColor(series.color) }));\n}\n\n/** A finite number, or `null` for anything else: a missing value is a gap, never a zero. */\nexport function valueOf(row: YuwChartRowDto, key: string): number | null {\n const value = row[key];\n\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\n\nexport function textWidth(labels: readonly string[]): number {\n return labels.reduce((widest, label) => Math.max(widest, label.length), 0) * CHART_CHAR_WIDTH;\n}\n\nexport function rectPath(x: number, y: number, width: number, height: number, radius = 0): string {\n const r = Math.max(0, Math.min(radius, width / 2, height / 2));\n\n return (\n `M${x + r},${y}h${width - 2 * r}a${r},${r} 0 0 1 ${r},${r}v${height - 2 * r}` +\n `a${r},${r} 0 0 1 ${-r},${r}h${2 * r - width}a${r},${r} 0 0 1 ${-r},${-r}` +\n `v${2 * r - height}a${r},${r} 0 0 1 ${r},${-r}Z`\n );\n}\n\nexport function emptyScene(table: YuwChartTable): YuwChartScene {\n return { cursorPaint: 'band', empty: true, grid: [], hits: [], marks: [], origin: { x: 0, y: 0 }, table, ticks: [] };\n}\n","import { area, type CurveFactory, curveMonotoneX, curveMonotoneY } from 'd3-shape';\nimport type { YuwChartTick } from '../chart-scene.interface';\nimport { CHART_CHAR_WIDTH, rectPath } from './chart-geometry';\n\n/** Pixel edges of the plot, inside the room reserved for the axis labels. */\nexport interface CartesianPlot {\n readonly bottom: number;\n readonly left: number;\n readonly right: number;\n readonly top: number;\n}\n\n/** Room reserved around the plot for the axis labels. */\nexport interface CartesianMargins {\n readonly bottom: number;\n readonly left: number;\n readonly right: number;\n readonly top: number;\n}\n\n/** A value interval at one category, in pixels: what a bar or an area covers. */\nexport interface CartesianSpan {\n readonly base: number;\n readonly category: number;\n readonly top: number;\n}\n\n/**\n * Everything that changes when a cartesian chart is turned on its side. Layouts speak of categories and values, and\n * the orientation alone decides which of them is `x`.\n */\nexport interface CartesianOrientation {\n readonly curve: CurveFactory;\n anchor(plot: CartesianPlot, category: number): { x: number; y: number };\n area(spans: readonly CartesianSpan[]): string;\n band(plot: CartesianPlot, start: number, end: number): string;\n bar(category: number, size: number, base: number, top: number, radius: number): string;\n categoryRange(plot: CartesianPlot): [number, number];\n categoryTick(plot: CartesianPlot, category: number, label: string): YuwChartTick;\n cursor(plot: CartesianPlot, category: number): string;\n grid(plot: CartesianPlot, value: number): string;\n categoryLabelChars(margins: CartesianMargins): number;\n categoryLabelRoom(categoryLabelWidth: number): number;\n margins(width: number, valueLabelWidth: number, categoryLabelWidth: number): CartesianMargins;\n point(category: number, value: number): [number, number];\n valueRange(plot: CartesianPlot): [number, number];\n valueTick(plot: CartesianPlot, value: number, label: string): YuwChartTick;\n valueTickCount(plot: CartesianPlot, valueLabelWidth: number): number;\n}\n\nconst LABEL_GAP = 8;\nconst AXIS_ROOM = 24;\nconst LINE_HEIGHT = 16;\nconst MAX_VALUE_TICKS = 5;\n\nfunction tickCount(length: number, room: number): number {\n return Math.max(2, Math.min(MAX_VALUE_TICKS, Math.floor(length / room)));\n}\n\nexport const VERTICAL: CartesianOrientation = {\n curve: curveMonotoneX,\n anchor: (plot, category) => ({ x: category, y: (plot.top + plot.bottom) / 2 }),\n area: (spans) =>\n area<CartesianSpan>()\n .x((span) => span.category)\n .y0((span) => span.base)\n .y1((span) => span.top)\n .curve(curveMonotoneX)(spans) ?? '',\n band: (plot, start, end) => rectPath(start, plot.top, end - start, plot.bottom - plot.top),\n bar: (category, size, base, top, radius) =>\n rectPath(category, Math.min(base, top), size, Math.abs(base - top), radius),\n categoryLabelChars: () => Number.POSITIVE_INFINITY,\n categoryLabelRoom: (categoryLabelWidth) => categoryLabelWidth + LABEL_GAP,\n categoryRange: (plot) => [plot.left, plot.right],\n categoryTick: (plot, category, label) => ({ anchor: 'middle', label, x: category, y: plot.bottom + AXIS_ROOM - 6 }),\n cursor: (plot, category) => `M${category},${plot.top}V${plot.bottom}`,\n grid: (plot, value) => `M${plot.left},${value}H${plot.right}`,\n margins: (_width, valueLabelWidth) => ({\n top: LABEL_GAP,\n right: LABEL_GAP,\n bottom: AXIS_ROOM,\n left: valueLabelWidth + LABEL_GAP,\n }),\n point: (category, value) => [category, value],\n valueRange: (plot) => [plot.bottom, plot.top],\n valueTick: (plot, value, label) => ({ anchor: 'end', label, x: plot.left - LABEL_GAP, y: value }),\n valueTickCount: (plot) => tickCount(plot.bottom - plot.top, 2 * LINE_HEIGHT),\n};\n\nexport const HORIZONTAL: CartesianOrientation = {\n curve: curveMonotoneY,\n anchor: (plot, category) => ({ x: plot.right, y: category }),\n area: (spans) =>\n area<CartesianSpan>()\n .y((span) => span.category)\n .x0((span) => span.base)\n .x1((span) => span.top)\n .curve(curveMonotoneY)(spans) ?? '',\n band: (plot, start, end) => rectPath(plot.left, start, plot.right - plot.left, end - start),\n bar: (category, size, base, top, radius) =>\n rectPath(Math.min(base, top), category, Math.abs(base - top), size, radius),\n categoryLabelChars: (margins) => Math.max(1, Math.floor((margins.left - LABEL_GAP) / CHART_CHAR_WIDTH)),\n categoryLabelRoom: () => LINE_HEIGHT,\n categoryRange: (plot) => [plot.top, plot.bottom],\n categoryTick: (plot, category, label) => ({ anchor: 'end', label, x: plot.left - LABEL_GAP, y: category }),\n cursor: (plot, category) => `M${plot.left},${category}H${plot.right}`,\n grid: (plot, value) => `M${value},${plot.top}V${plot.bottom}`,\n margins: (width, valueLabelWidth, categoryLabelWidth) => ({\n top: LABEL_GAP,\n right: Math.max(LABEL_GAP, valueLabelWidth / 2),\n bottom: AXIS_ROOM,\n left: Math.min(categoryLabelWidth, width * 0.4) + LABEL_GAP,\n }),\n point: (category, value) => [value, category],\n valueRange: (plot) => [plot.left, plot.right],\n valueTick: (plot, value, label) => ({ anchor: 'middle', label, x: value, y: plot.bottom + AXIS_ROOM - 6 }),\n valueTickCount: (plot, valueLabelWidth) => tickCount(plot.right - plot.left, valueLabelWidth + 2 * LABEL_GAP),\n};\n","import { stack, stackOffsetDiverging, stackOffsetNone } from 'd3-shape';\nimport type { YuwChartRowDto } from '../chart.interface';\nimport { valueOf } from './chart-geometry';\n\n/**\n * Where one series sits at one category, in data units: from `base` to `top`. `value` is what the row holds, `null`\n * when it holds none and the series only keeps its place in a stack.\n */\nexport interface CartesianValue {\n readonly base: number;\n readonly top: number;\n readonly value: number | null;\n}\n\n/** The value of every series at every category (`null` for a missing one) and the extent they span. */\nexport interface CartesianValues {\n readonly domain: [number, number];\n readonly byKey: ReadonlyMap<string, readonly (CartesianValue | null)[]>;\n}\n\nexport type CartesianValueModel = (rows: readonly YuwChartRowDto[], keys: readonly string[]) => CartesianValues;\n\nfunction extentWithZero(values: readonly (CartesianValue | null)[][]): [number, number] {\n const ends = values.flat().flatMap((value) => (value ? [value.base, value.top] : []));\n const min = Math.min(0, ...ends);\n const max = Math.max(0, ...ends);\n\n return [min, max === min ? min + 1 : max];\n}\n\n/** Every series starts from zero. */\nexport const sideBySide: CartesianValueModel = (rows, keys) => {\n const columns = keys.map((key) =>\n rows.map((row) => {\n const value = valueOf(row, key);\n\n return value === null ? null : { base: 0, top: value, value };\n }),\n );\n\n return { domain: extentWithZero(columns), byKey: new Map(keys.map((key, index) => [key, columns[index]])) };\n};\n\n/** Each series starts where the previous one ended, following `offset`. */\nfunction stackedBy(offset: typeof stackOffsetNone): CartesianValueModel {\n return (rows, keys) => {\n const layers = stack<YuwChartRowDto, string>()\n .keys(keys)\n .value((row, key) => valueOf(row, key) ?? 0)\n .offset(offset)(rows);\n const columns = layers.map((layer) =>\n layer.map(([base, top], index) => ({ base, top, value: valueOf(rows[index], layer.key) })),\n );\n\n return { domain: extentWithZero(columns), byKey: new Map(keys.map((key, index) => [key, columns[index]])) };\n };\n}\n\n/** A continuous stack, so an area keeps its height where a series holds nothing. */\nexport const stacked = stackedBy(stackOffsetNone);\n\n/** Positive values stack upwards and negative ones downwards from zero, as bars need. */\nexport const stackedDiverging = stackedBy(stackOffsetDiverging);\n","import { scaleBand, scaleLinear, scalePoint } from 'd3-scale';\nimport { line } from 'd3-shape';\nimport type { YuwChartRowDto } from '../chart.interface';\nimport type {\n YuwChartLayout,\n YuwChartMark,\n YuwChartPoint,\n YuwChartScene,\n YuwChartSceneInput,\n YuwChartTable,\n YuwChartTick,\n YuwChartTooltip,\n} from '../chart-scene.interface';\nimport type { CartesianOrientation, CartesianPlot, CartesianSpan } from './cartesian-axis';\nimport type { CartesianValue, CartesianValueModel, CartesianValues } from './cartesian-values';\nimport { emptyScene, seriesOf, textWidth, valueOf, type YuwChartSeries } from './chart-geometry';\n\nconst VALUE_TICKS = 5;\nconst BAR_RADIUS = 4;\n\n/** What highlights the active category: its whole band behind bars, a rule across lines and areas. */\nconst CURSORS: Record<\n YuwChartScene['cursorPaint'],\n (orientation: CartesianOrientation, plot: CartesianPlot, start: number, end: number, center: number) => string\n> = {\n band: (orientation, plot, start, end) => orientation.band(plot, start, end),\n line: (orientation, plot, _start, _end, center) => orientation.cursor(plot, center),\n};\n\n/** Where each category sits along its axis: `starts` and `size` frame its bars, `centers` place its points. */\nexport interface CartesianCategories {\n readonly centers: readonly number[];\n readonly size: number;\n readonly starts: readonly number[];\n}\n\nexport type CartesianCategoryScale = (count: number, range: [number, number]) => CartesianCategories;\n\n/** What a mark builder draws with: the measured plot, the scaled values and where every category sits. */\nexport interface CartesianFrame {\n readonly categories: CartesianCategories;\n readonly orientation: CartesianOrientation;\n readonly scale: (value: number) => number;\n readonly series: readonly YuwChartSeries[];\n readonly values: CartesianValues;\n}\n\nexport interface CartesianMarkBuilder {\n readonly cursor: YuwChartScene['cursorPaint'];\n readonly points: boolean;\n marks(frame: CartesianFrame): YuwChartMark[];\n}\n\nexport interface CartesianOptions {\n readonly categories: CartesianCategoryScale;\n readonly marks: CartesianMarkBuilder;\n readonly orientation: CartesianOrientation;\n readonly values: CartesianValueModel;\n}\n\n/** Categories as bands, so bars have a width. */\nexport const bands: CartesianCategoryScale = (count, range) => {\n const scale = scaleBand<number>().domain(indices(count)).range(range).paddingInner(0.2).paddingOuter(0.1);\n const starts = indices(count).map((index) => scale(index) ?? 0);\n\n return { starts, size: scale.bandwidth(), centers: starts.map((start) => start + scale.bandwidth() / 2) };\n};\n\n/** Categories as points spanning the whole axis, so lines reach both edges. */\nexport const points: CartesianCategoryScale = (count, range) => {\n const scale = scalePoint<number>().domain(indices(count)).range(range);\n const centers = indices(count).map((index) => scale(index) ?? 0);\n\n return { starts: centers, size: 0, centers };\n};\n\n/** Bars of every series side by side inside the category band. */\nexport const groupedBars: CartesianMarkBuilder = {\n cursor: 'band',\n points: false,\n marks: ({ categories, orientation, scale, series, values }) => {\n const inner = scaleBand<string>()\n .domain(series.map((item) => item.key))\n .range([0, categories.size])\n .padding(0.1);\n\n return series.flatMap((item) =>\n barsOf(values, item).map(({ index, value }) => ({\n color: item.color,\n d: orientation.bar(\n categories.starts[index] + (inner(item.key) ?? 0),\n inner.bandwidth(),\n scale(value.base),\n scale(value.top),\n BAR_RADIUS,\n ),\n hit: index,\n key: item.key,\n paint: 'fill' as const,\n })),\n );\n },\n};\n\n/** One bar per category, each series a segment of it. */\nexport const stackedBars: CartesianMarkBuilder = {\n cursor: 'band',\n points: false,\n marks: ({ categories, orientation, scale, series, values }) =>\n series.flatMap((item) =>\n barsOf(values, item).map(({ index, value }) => ({\n color: item.color,\n d: orientation.bar(categories.starts[index], categories.size, scale(value.base), scale(value.top), 0),\n hit: index,\n key: item.key,\n paint: 'fill' as const,\n })),\n ),\n};\n\nexport const lines: CartesianMarkBuilder = {\n cursor: 'line',\n points: true,\n marks: (frame) => frame.series.map((item) => strokeOf(frame, item)),\n};\n\n/** A translucent band under each series, outlined by its line. */\nexport const areas: CartesianMarkBuilder = {\n cursor: 'line',\n points: true,\n marks: (frame) =>\n frame.series.flatMap((item) => [\n {\n color: item.color,\n d: frame.orientation.area(spansOf(frame, item)),\n hit: null,\n key: item.key,\n paint: 'area' as const,\n },\n strokeOf(frame, item),\n ]),\n};\n\n/** A bar, line or area chart: the categories along one axis, the values along the other. */\nexport function cartesianLayout(options: CartesianOptions): YuwChartLayout {\n return (input) => {\n const series = seriesOf(input.config);\n const table = tableOf(input, series);\n\n if (input.data.length === 0 || series.length === 0) {\n return emptyScene(table);\n }\n\n return sceneOf(options, input, series, table);\n };\n}\n\nfunction sceneOf(\n options: CartesianOptions,\n input: YuwChartSceneInput,\n series: readonly YuwChartSeries[],\n table: YuwChartTable,\n): YuwChartScene {\n const { orientation } = options;\n const values = options.values(\n input.data,\n series.map((item) => item.key),\n );\n const value = scaleLinear().domain(values.domain).nice();\n const labelWidth = textWidth(value.ticks(VALUE_TICKS).map((tick) => input.valueFormat(tick)));\n const titles = input.data.map((row) => titleOf(input, row));\n const margins = orientation.margins(input.width, labelWidth, textWidth(titles));\n const plot: CartesianPlot = {\n top: margins.top,\n left: margins.left,\n right: Math.max(margins.left + 1, input.width - margins.right),\n bottom: Math.max(margins.top + 1, input.height - margins.bottom),\n };\n const tickCount = orientation.valueTickCount(plot, labelWidth);\n const candidates = value.ticks(tickCount);\n const tickValues = candidates.filter((_tick, index) => index % Math.ceil(candidates.length / tickCount) === 0);\n const valueLabels = tickValues.map((tick) => input.valueFormat(tick));\n const scale = value.range(orientation.valueRange(plot));\n const range = orientation.categoryRange(plot);\n const categories = options.categories(input.data.length, range);\n const frame: CartesianFrame = { categories, orientation, scale, series, values };\n const boundaries = boundariesOf(categories.centers, range);\n\n return {\n cursorPaint: options.marks.cursor,\n empty: false,\n grid: tickValues.map((tick) => orientation.grid(plot, scale(tick))),\n hits: categories.centers.map((center, index) => ({\n anchor: orientation.anchor(plot, center),\n cursor: CURSORS[options.marks.cursor](orientation, plot, boundaries[index], boundaries[index + 1], center),\n d: orientation.band(plot, boundaries[index], boundaries[index + 1]),\n points: options.marks.points ? pointsOf(frame, index) : [],\n tooltip: tooltipOf(input, series, values, index, titles[index]),\n })),\n marks: options.marks.marks(frame),\n origin: { x: 0, y: 0 },\n table,\n ticks: [\n ...tickValues.map((tick, index) => orientation.valueTick(plot, scale(tick), valueLabels[index])),\n ...categoryTicksOf(orientation, plot, margins, categories.centers, range, titles),\n ],\n };\n}\n\nfunction categoryTicksOf(\n orientation: CartesianOrientation,\n plot: CartesianPlot,\n margins: Parameters<CartesianOrientation['categoryLabelChars']>[0],\n centers: readonly number[],\n range: [number, number],\n titles: readonly string[],\n): YuwChartTick[] {\n const step = Math.abs(range[1] - range[0]) / Math.max(1, centers.length);\n const every = Math.max(1, Math.ceil(orientation.categoryLabelRoom(textWidth(titles)) / Math.max(step, 1)));\n const chars = orientation.categoryLabelChars(margins);\n\n return centers\n .map((center, index) => orientation.categoryTick(plot, center, truncate(titles[index], chars)))\n .filter((_tick, index) => index % every === 0);\n}\n\nfunction pointsOf({ categories, orientation, scale, series, values }: CartesianFrame, index: number): YuwChartPoint[] {\n return series.flatMap((item) => {\n const value = values.byKey.get(item.key)?.[index];\n\n if (!value || value.value === null) {\n return [];\n }\n\n const [cx, cy] = orientation.point(categories.centers[index], scale(value.top));\n\n return [{ color: item.color, cx, cy, key: item.key }];\n });\n}\n\nfunction strokeOf({ categories, orientation, scale, values }: CartesianFrame, item: YuwChartSeries): YuwChartMark {\n const coordinates = (values.byKey.get(item.key) ?? []).map((value, index) =>\n value ? orientation.point(categories.centers[index], scale(value.top)) : null,\n );\n const path = line<[number, number] | null>()\n .defined((point) => point !== null)\n .x((point) => point?.[0] ?? 0)\n .y((point) => point?.[1] ?? 0)\n .curve(orientation.curve);\n\n return { color: item.color, d: path(coordinates) ?? '', hit: null, key: item.key, paint: 'stroke' };\n}\n\nfunction spansOf({ categories, scale, values }: CartesianFrame, item: YuwChartSeries): CartesianSpan[] {\n return (values.byKey.get(item.key) ?? []).flatMap((value, index) =>\n value ? [{ base: scale(value.base), category: categories.centers[index], top: scale(value.top) }] : [],\n );\n}\n\nfunction barsOf(values: CartesianValues, item: YuwChartSeries): { index: number; value: CartesianValue }[] {\n return (values.byKey.get(item.key) ?? []).flatMap((value, index) =>\n value && value.value !== null && value.base !== value.top ? [{ index, value }] : [],\n );\n}\n\nfunction tooltipOf(\n input: YuwChartSceneInput,\n series: readonly YuwChartSeries[],\n values: CartesianValues,\n index: number,\n title: string,\n): YuwChartTooltip {\n return {\n title: input.categoryKey === undefined ? null : title,\n items: series.flatMap((item) => {\n const value = values.byKey.get(item.key)?.[index]?.value ?? null;\n\n return value === null\n ? []\n : [{ color: item.color, key: item.key, label: item.label, value: input.valueFormat(value) }];\n }),\n };\n}\n\nfunction tableOf(input: YuwChartSceneInput, series: readonly YuwChartSeries[]): YuwChartTable {\n return {\n corner: input.categoryLabel ?? '',\n head: series.map((item) => item.label),\n rows: input.data.map((row) => ({\n header: titleOf(input, row),\n cells: series.map((item) => {\n const value = valueOf(row, item.key);\n\n return value === null ? '' : input.valueFormat(value);\n }),\n })),\n };\n}\n\nfunction titleOf(input: YuwChartSceneInput, row: YuwChartRowDto): string {\n return input.categoryKey === undefined ? '' : input.categoryFormat(row[input.categoryKey]);\n}\n\n/** Edges between consecutive categories, so every pixel of the axis activates the nearest one. */\nfunction boundariesOf(centers: readonly number[], range: [number, number]): number[] {\n const middles = centers.slice(1).map((center, index) => (centers[index] + center) / 2);\n\n return [range[0], ...middles, range[1]];\n}\n\nfunction truncate(label: string, chars: number): string {\n return label.length > chars ? `${label.slice(0, Math.max(1, chars - 1))}…` : label;\n}\n\nfunction indices(count: number): number[] {\n return Array.from({ length: count }, (_, index) => index);\n}\n","import { arc, pie, type PieArcDatum } from 'd3-shape';\nimport type { YuwChartLayout, YuwChartSceneInput, YuwChartTable } from '../chart-scene.interface';\nimport { emptyScene, seriesOf, valueOf, type YuwChartSeries } from './chart-geometry';\n\nconst EDGE = 4;\n\nexport interface PieOptions {\n /** Inner radius as a share of the outer one: `0` is a pie, anything above a donut. */\n readonly hole: number;\n}\n\ninterface Slice extends YuwChartSeries {\n readonly total: number;\n}\n\n/** One slice per series, sized by its value summed across every row. */\nexport function pieLayout(options: PieOptions): YuwChartLayout {\n return (input) => {\n const slices = slicesOf(input);\n const table = tableOf(input, slices);\n const shown = slices.filter((slice) => slice.total > 0);\n\n if (shown.length === 0) {\n return emptyScene(table);\n }\n\n const radius = Math.max(1, Math.min(input.width, input.height) / 2 - EDGE);\n const centerX = input.width / 2;\n const centerY = input.height / 2;\n const arcs = pie<Slice>()\n .sort(null)\n .value((slice) => slice.total)(shown);\n const shape = arc<PieArcDatum<Slice>>()\n .innerRadius(radius * options.hole)\n .outerRadius(radius)\n .padAngle(options.hole > 0 ? 0.01 : 0)\n .cornerRadius(options.hole > 0 ? 3 : 0);\n const paths = arcs.map((datum) => shape(datum) ?? '');\n\n return {\n cursorPaint: 'band',\n empty: false,\n grid: [],\n origin: { x: centerX, y: centerY },\n hits: arcs.map((datum, index) => {\n const [x, y] = shape.centroid(datum);\n\n return {\n anchor: { x: centerX + x, y: centerY + y },\n cursor: null,\n d: paths[index],\n points: [],\n tooltip: {\n title: null,\n items: [\n {\n color: datum.data.color,\n key: datum.data.key,\n label: datum.data.label,\n value: input.valueFormat(datum.data.total),\n },\n ],\n },\n };\n }),\n marks: arcs.map((datum, index) => ({\n color: datum.data.color,\n d: paths[index],\n hit: index,\n key: datum.data.key,\n paint: 'fill' as const,\n })),\n table,\n ticks: [],\n };\n };\n}\n\nfunction slicesOf(input: YuwChartSceneInput): Slice[] {\n return seriesOf(input.config).map((series) => ({\n ...series,\n total: input.data.reduce((sum, row) => sum + Math.max(0, valueOf(row, series.key) ?? 0), 0),\n }));\n}\n\nfunction tableOf(input: YuwChartSceneInput, slices: readonly Slice[]): YuwChartTable {\n return {\n corner: null,\n head: slices.map((slice) => slice.label),\n rows:\n input.data.length === 0 ? [] : [{ header: null, cells: slices.map((slice) => input.valueFormat(slice.total)) }],\n };\n}\n","import type { YuwChartKindDto } from './chart.interface';\nimport type { YuwChartLayout } from './chart-scene.interface';\nimport { HORIZONTAL, VERTICAL } from './layouts/cartesian-axis';\nimport { sideBySide, stacked, stackedDiverging } from './layouts/cartesian-values';\nimport { areas, bands, cartesianLayout, groupedBars, lines, points, stackedBars } from './layouts/cartesian.layout';\nimport { pieLayout } from './layouts/pie.layout';\n\n/** The layout drawing each chart kind. A new kind is one entry here, built from the same parts. */\nexport const YUW_CHART_LAYOUTS: Readonly<Record<YuwChartKindDto, YuwChartLayout>> = {\n area: cartesianLayout({ categories: points, marks: areas, orientation: VERTICAL, values: sideBySide }),\n 'area-stacked': cartesianLayout({ categories: points, marks: areas, orientation: VERTICAL, values: stacked }),\n bar: cartesianLayout({ categories: bands, marks: groupedBars, orientation: VERTICAL, values: sideBySide }),\n 'bar-horizontal': cartesianLayout({\n categories: bands,\n marks: groupedBars,\n orientation: HORIZONTAL,\n values: sideBySide,\n }),\n 'bar-horizontal-stacked': cartesianLayout({\n categories: bands,\n marks: stackedBars,\n orientation: HORIZONTAL,\n values: stackedDiverging,\n }),\n 'bar-stacked': cartesianLayout({\n categories: bands,\n marks: stackedBars,\n orientation: VERTICAL,\n values: stackedDiverging,\n }),\n donut: pieLayout({ hole: 0.6 }),\n line: cartesianLayout({ categories: points, marks: lines, orientation: VERTICAL, values: sideBySide }),\n pie: pieLayout({ hole: 0 }),\n};\n","import { afterNextRender, DestroyRef, type ElementRef, inject, type Signal, signal } from '@angular/core';\n\nexport interface YuwChartSize {\n readonly height: number;\n readonly width: number;\n}\n\nconst UNMEASURED: YuwChartSize = { height: 0, width: 0 };\n\n/**\n * Tracks the content box of `element` as a signal. Stays at zero on the server and wherever `ResizeObserver` is\n * missing, so nothing is drawn until there is a real box to draw into. Must be called in an injection context.\n */\nexport function injectChartSize(element: Signal<ElementRef<HTMLElement> | undefined>): Signal<YuwChartSize> {\n const size = signal(UNMEASURED, { equal: (a, b) => a.width === b.width && a.height === b.height });\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n const target = element()?.nativeElement;\n\n if (!target || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const observer = new ResizeObserver(([entry]) =>\n size.set({ width: Math.floor(entry.contentRect.width), height: Math.floor(entry.contentRect.height) }),\n );\n\n observer.observe(target);\n destroyRef.onDestroy(() => observer.disconnect());\n });\n\n return size.asReadonly();\n}\n","import type { YuwChartMarkPaintDto, YuwChartScene } from './chart-scene.interface';\n\n/** Classes of each kind of mark; the color arrives separately, as a `var(--chart-n)` style. */\nexport const MARK_CLASS: Record<YuwChartMarkPaintDto, string> = {\n area: 'opacity-30',\n fill: 'stroke-background stroke-1 motion-safe:transition-opacity motion-safe:duration-150',\n stroke: 'fill-none stroke-2',\n};\n\n/** Which style property carries the color of each kind of mark. */\nexport const MARK_COLOR_PROPERTY: Record<YuwChartMarkPaintDto, 'fill' | 'stroke'> = {\n area: 'fill',\n fill: 'fill',\n stroke: 'stroke',\n};\n\nexport const MARK_DIMMED_CLASS = 'opacity-40';\n\nexport const CURSOR_CLASS: Record<YuwChartScene['cursorPaint'], string> = {\n band: 'fill-muted',\n line: 'fill-none stroke-border stroke-1',\n};\n\n/** Which side of its anchor the tooltip opens to, so it stays inside the plot. */\nexport const TOOLTIP_SIDE_CLASS: Record<'left' | 'right', string> = {\n left: '-translate-x-[calc(100%+0.75rem)]',\n right: 'translate-x-3',\n};\n\n/** What each key does to the active position, given it and how many there are; `null` hides the tooltip. */\nexport const KEY_MOVES: Readonly<Partial<Record<string, (active: number, count: number) => number | null>>> = {\n ArrowDown: (active, count) => Math.min(active + 1, count - 1),\n ArrowLeft: (active) => Math.max(active - 1, 0),\n ArrowRight: (active, count) => Math.min(active + 1, count - 1),\n ArrowUp: (active) => Math.max(active - 1, 0),\n End: (_active, count) => count - 1,\n Escape: () => null,\n Home: () => 0,\n};\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n type ElementRef,\n inject,\n input,\n linkedSignal,\n viewChild,\n} from '@angular/core';\nimport { HlmSkeleton } from 'yukit-web/helm/skeleton';\nimport { hlm } from 'yukit-web/helm/utils';\nimport type {\n YuwChartCategoryFormatDto,\n YuwChartConfigDto,\n YuwChartKindDto,\n YuwChartRowDto,\n YuwChartValueFormatDto,\n} from './chart.interface';\nimport { YUW_CHART_LAYOUTS } from './chart.registry';\nimport { injectChartSize } from './chart-size';\nimport {\n CURSOR_CLASS,\n KEY_MOVES,\n MARK_CLASS,\n MARK_COLOR_PROPERTY,\n MARK_DIMMED_CLASS,\n TOOLTIP_SIDE_CLASS,\n} from './chart.variants';\nimport { cssColor } from './layouts/chart-geometry';\n\n/**\n * Chart drawn as SVG from a series `config` and `data` rows, with a tooltip and a legend that read the same config.\n *\n * Every series is a key of `config` naming the row field that holds its values, plus its label (already translated)\n * and a `chart-n` color token, so light and dark mode recolor through the theme with no redraw. `kind` picks the\n * drawing: bars (grouped, stacked, horizontal), lines, areas, or a pie / donut with one slice per series summed across\n * the rows. The chart fills its root element and redraws when it resizes; size it with `class` (default `h-72`).\n *\n * The pointer and the keyboard (focus the plot, then the arrow keys, Home, End and Escape) move a tooltip across the\n * categories or slices, announced politely to screen readers. The same numbers are always available to assistive\n * technology as a visually hidden table, which also renders on the server, where the plot is not drawn.\n *\n * The library hardcodes no locale: `valueFormat` and `categoryFormat` turn values and categories into text.\n *\n * Inputs:\n * - `ariaLabel`: Required accessible name of the chart, e.g. its title. The app supplies and translates it.\n * - `categoryFormat`: Turns the value under `categoryKey` into its label. Cartesian kinds only. Default is `String`.\n * - `categoryKey`: Row field holding each category, e.g. the period. Cartesian kinds only. Default is `undefined`.\n * - `categoryLabel`: Header of the category column in the accessible table, e.g. \"Month\". Cartesian kinds only.\n * Default is `undefined`.\n * - `config`: Required series, keyed by the row field holding their values (`YuwChartConfigDto`). Its order is the\n * drawing, stacking, legend and tooltip order.\n * - `data`: Required rows (`YuwChartRowDto[]`). A non-numeric value is a gap, never a zero.\n * - `description`: Accessible description, e.g. the period the chart covers. Default is `undefined`.\n * - `emptyText`: Required message shown when there is nothing to draw. The app supplies and translates it.\n * - `kind`: The drawing (`YuwChartKindDto`). Default is `'bar'`.\n * - `legend`: Shows the legend under the plot. Default is `true`.\n * - `loading`: Shows a skeleton instead of the plot and marks the chart busy. Default is `false`.\n * - `valueFormat`: Turns a value into the text of axes, tooltips and the accessible table, e.g. a localized currency.\n * Default is `String`.\n * - `class`: Extra classes merged last onto the root element; set its height here.\n *\n * Usage:\n * ```html\n * <yuw-chart\n * kind=\"bar-stacked\"\n * ariaLabel=\"Purchases per month\"\n * emptyText=\"No purchases in this period\"\n * categoryKey=\"month\"\n * categoryLabel=\"Month\"\n * [config]=\"config\"\n * [data]=\"rows\"\n * [valueFormat]=\"formatEuros\"\n * class=\"h-80\"\n * />\n * ```\n */\n@Component({\n selector: 'yuw-chart',\n imports: [HlmSkeleton],\n host: {\n class: 'contents',\n },\n templateUrl: './chart.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class YuwChartComponent {\n private readonly _id = inject(_IdGenerator).getId('yuw-chart-');\n\n private readonly _plot = viewChild<ElementRef<HTMLElement>>('plot');\n\n readonly ariaLabel = input.required<string>();\n readonly categoryFormat = input<YuwChartCategoryFormatDto>(String);\n readonly categoryKey = input<string>();\n readonly categoryLabel = input<string>();\n readonly config = input.required<YuwChartConfigDto>();\n readonly data = input.required<readonly YuwChartRowDto[]>();\n readonly description = input<string>();\n readonly emptyText = input.required<string>();\n readonly kind = input<YuwChartKindDto>('bar');\n readonly legend = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n readonly userClass = input<string>('', { alias: 'class' });\n readonly valueFormat = input<YuwChartValueFormatDto>(String);\n\n protected readonly descriptionId = `${this._id}-description`;\n protected readonly size = injectChartSize(this._plot);\n\n protected readonly scene = computed(() =>\n YUW_CHART_LAYOUTS[this.kind()]({\n categoryFormat: this.categoryFormat(),\n categoryKey: this.categoryKey(),\n categoryLabel: this.categoryLabel(),\n config: this.config(),\n data: this.data(),\n height: this.size().height,\n valueFormat: this.valueFormat(),\n width: this.size().width,\n }),\n );\n protected readonly active = linkedSignal<unknown, number | null>({ source: this.scene, computation: () => null });\n protected readonly activeHit = computed(() => {\n const active = this.active();\n\n return active === null ? null : (this.scene().hits[active] ?? null);\n });\n protected readonly activePoints = computed(() => this.activeHit()?.points ?? []);\n protected readonly announcement = computed(() => {\n const tooltip = this.activeHit()?.tooltip;\n\n if (!tooltip) {\n return '';\n }\n\n return [tooltip.title, ...tooltip.items.map((item) => `${item.label}: ${item.value}`)]\n .filter((part) => !!part)\n .join(', ');\n });\n protected readonly cursorClass = computed(() => CURSOR_CLASS[this.scene().cursorPaint]);\n protected readonly describedBy = computed(() => (this.description() ? this.descriptionId : null));\n protected readonly drawable = computed(() => this.size().width > 0 && this.size().height > 0);\n protected readonly interactive = computed(() => !this.loading() && this.scene().hits.length > 0);\n protected readonly legendItems = computed(() =>\n Object.entries(this.config()).map(([key, series]) => ({ key, label: series.label, color: cssColor(series.color) })),\n );\n protected readonly marks = computed(() => {\n const active = this.active();\n\n return this.scene().marks.map((mark) => ({\n d: mark.d,\n key: mark.key,\n class: hlm(\n MARK_CLASS[mark.paint],\n active !== null && mark.hit !== null && mark.hit !== active && MARK_DIMMED_CLASS,\n ),\n style: { [MARK_COLOR_PROPERTY[mark.paint]]: mark.color },\n }));\n });\n protected readonly origin = computed(() => `translate(${this.scene().origin.x},${this.scene().origin.y})`);\n protected readonly rootClass = computed(() => hlm('flex h-72 w-full flex-col gap-3', this.userClass()));\n protected readonly showLegend = computed(() => this.legend() && !this.loading() && !this.scene().empty);\n protected readonly tooltip = computed(() => {\n const hit = this.activeHit();\n\n if (!hit || hit.tooltip.items.length === 0) {\n return null;\n }\n\n return {\n ...hit.tooltip,\n left: hit.anchor.x,\n top: hit.anchor.y,\n class: TOOLTIP_SIDE_CLASS[hit.anchor.x > this.size().width / 2 ? 'left' : 'right'],\n };\n });\n protected readonly viewBox = computed(() => `0 0 ${this.size().width} ${this.size().height}`);\n\n protected activate(index: number): void {\n this.active.set(index);\n }\n\n protected clear(): void {\n this.active.set(null);\n }\n\n protected onFocus(event: FocusEvent): void {\n const target = event.target as HTMLElement;\n\n if (this.active() === null && target.matches(':focus-visible')) {\n this.active.set(0);\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const move = KEY_MOVES[event.key];\n const count = this.scene().hits.length;\n\n if (!move || count === 0) {\n return;\n }\n\n event.preventDefault();\n this.active.set(move(this.active() ?? -1, count));\n }\n}\n","<div role=\"figure\" [class]=\"rootClass()\" [attr.aria-label]=\"ariaLabel()\" [attr.aria-busy]=\"loading() || null\">\n @if (description(); as text) {\n <p class=\"sr-only\" [id]=\"descriptionId\">{{ text }}</p>\n }\n\n <!-- Plot -->\n <div\n #plot\n role=\"group\"\n class=\"relative min-h-0 flex-1 rounded-md outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clear()\"\n (keydown)=\"onKeydown($event)\"\n (pointerleave)=\"clear()\"\n >\n @if (loading()) {\n <div hlmSkeleton class=\"size-full\" aria-hidden=\"true\"></div>\n } @else if (scene().empty) {\n <div class=\"flex size-full items-center justify-center text-center text-sm text-muted-foreground\">\n {{ emptyText() }}\n </div>\n } @else if (drawable()) {\n <svg\n aria-hidden=\"true\"\n class=\"absolute inset-0 overflow-visible\"\n [attr.width]=\"size().width\"\n [attr.height]=\"size().height\"\n [attr.viewBox]=\"viewBox()\"\n >\n @for (line of scene().grid; track $index) {\n <path class=\"fill-none stroke-border [stroke-dasharray:3_3]\" [attr.d]=\"line\" />\n }\n\n @if (activeHit()?.cursor; as cursor) {\n <path [class]=\"cursorClass()\" [attr.d]=\"cursor\" />\n }\n\n <g [attr.transform]=\"origin()\">\n @for (mark of marks(); track $index) {\n <path [class]=\"mark.class\" [style]=\"mark.style\" [attr.d]=\"mark.d\" />\n }\n </g>\n\n @for (point of activePoints(); track point.key) {\n <circle\n r=\"4\"\n class=\"stroke-background stroke-2\"\n [style.fill]=\"point.color\"\n [attr.cx]=\"point.cx\"\n [attr.cy]=\"point.cy\"\n />\n }\n\n @for (tick of scene().ticks; track $index) {\n <text\n dominant-baseline=\"middle\"\n class=\"fill-muted-foreground text-xs\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"tick.y\"\n [attr.text-anchor]=\"tick.anchor\"\n >\n {{ tick.label }}\n </text>\n }\n\n <g [attr.transform]=\"origin()\">\n @for (hit of scene().hits; track $index) {\n <path class=\"fill-transparent\" [attr.d]=\"hit.d\" (pointerenter)=\"activate($index)\" />\n }\n </g>\n </svg>\n\n @if (tooltip(); as tip) {\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute z-10 grid min-w-32 -translate-y-1/2 gap-1.5 rounded-md border bg-popover px-2.5 py-1.5 text-xs text-popover-foreground shadow-md motion-safe:transition-[left,top] motion-safe:duration-150\"\n [class]=\"tip.class\"\n [style.left.px]=\"tip.left\"\n [style.top.px]=\"tip.top\"\n >\n @if (tip.title) {\n <span class=\"font-medium\">{{ tip.title }}</span>\n }\n @for (item of tip.items; track item.key) {\n <span class=\"flex items-center gap-2\">\n <span class=\"size-2.5 shrink-0 rounded-[2px]\" [style.background]=\"item.color\"></span>\n <span class=\"text-muted-foreground\">{{ item.label }}</span>\n <span class=\"ml-auto font-mono font-medium tabular-nums\">{{ item.value }}</span>\n </span>\n }\n </div>\n }\n }\n\n <div role=\"status\" class=\"sr-only\">{{ announcement() }}</div>\n </div>\n\n <!-- Legend -->\n @if (showLegend()) {\n <ul class=\"flex flex-wrap items-center justify-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n @for (item of legendItems(); track item.key) {\n <li class=\"flex items-center gap-1.5\">\n <span aria-hidden=\"true\" class=\"size-2.5 shrink-0 rounded-[2px]\" [style.background]=\"item.color\"></span>\n {{ item.label }}\n </li>\n }\n </ul>\n }\n\n <!-- Accessible data -->\n <table class=\"sr-only\">\n <caption>\n {{ ariaLabel() }}\n </caption>\n <thead>\n <tr>\n @if (scene().table.corner !== null) {\n <th scope=\"col\">{{ scene().table.corner }}</th>\n }\n @for (head of scene().table.head; track $index) {\n <th scope=\"col\">{{ head }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of scene().table.rows; track $index) {\n <tr>\n @if (row.header !== null) {\n <th scope=\"row\">{{ row.header }}</th>\n }\n @for (cell of row.cells; track $index) {\n <td>{{ cell }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tableOf"],"mappings":"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"}
|