@ojiepermana/angular-chart 22.0.27
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 +249 -0
- package/fesm2022/ojiepermana-angular-chart-area.mjs +266 -0
- package/fesm2022/ojiepermana-angular-chart-area.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart-bar.mjs +674 -0
- package/fesm2022/ojiepermana-angular-chart-bar.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart-core.mjs +764 -0
- package/fesm2022/ojiepermana-angular-chart-core.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart-line.mjs +281 -0
- package/fesm2022/ojiepermana-angular-chart-line.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart-pie.mjs +248 -0
- package/fesm2022/ojiepermana-angular-chart-pie.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1186 -0
- package/fesm2022/ojiepermana-angular-chart-primitives.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart-radar.mjs +329 -0
- package/fesm2022/ojiepermana-angular-chart-radar.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart-radial.mjs +255 -0
- package/fesm2022/ojiepermana-angular-chart-radial.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart-scatter.mjs +253 -0
- package/fesm2022/ojiepermana-angular-chart-scatter.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-chart.mjs +20 -0
- package/fesm2022/ojiepermana-angular-chart.mjs.map +1 -0
- package/package.json +76 -0
- package/types/ojiepermana-angular-chart-area.d.ts +58 -0
- package/types/ojiepermana-angular-chart-bar.d.ts +171 -0
- package/types/ojiepermana-angular-chart-core.d.ts +369 -0
- package/types/ojiepermana-angular-chart-line.d.ts +57 -0
- package/types/ojiepermana-angular-chart-pie.d.ts +93 -0
- package/types/ojiepermana-angular-chart-primitives.d.ts +265 -0
- package/types/ojiepermana-angular-chart-radar.d.ts +89 -0
- package/types/ojiepermana-angular-chart-radial.d.ts +86 -0
- package/types/ojiepermana-angular-chart-scatter.d.ts +95 -0
- package/types/ojiepermana-angular-chart.d.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-chart-bar.mjs","sources":["../../../library/chart/bar/bar-layout.ts","../../../library/chart/bar/bar-dot.ts","../../../library/chart/bar/bar-chart.ts","../../../library/chart/bar/ojiepermana-angular-chart-bar.ts"],"sourcesContent":["import { scaleBand, scaleLinear } from 'd3-scale';\nimport { max as d3max, min as d3min } from 'd3-array';\nimport { stack as d3stack, type Series, type SeriesPoint } from 'd3-shape';\nimport type { ChartDatum, ChartOrientation } from '@ojiepermana/angular-chart/core';\nimport { seriesColorVar } from '@ojiepermana/angular-chart/core';\n\n/** Bar-chart layout variant. */\nexport type BarVariant = 'grouped' | 'stacked';\n\n/** A single bar rectangle ready to render. */\nexport interface BarRect {\n readonly key: string; // unique per cell for @for tracking\n readonly seriesKey: string;\n readonly datumIndex: number;\n readonly category: string;\n readonly value: number;\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly color: string;\n readonly active: boolean;\n}\n\n/** Inputs required to compute bar-chart geometry. */\nexport interface BarLayoutInput {\n readonly data: readonly ChartDatum[];\n readonly xKey: string;\n readonly seriesKeys: readonly string[];\n readonly variant: BarVariant;\n readonly orientation: ChartOrientation;\n readonly innerWidth: number;\n readonly innerHeight: number;\n readonly bandPadding: number;\n readonly groupPadding: number;\n readonly colorKey?: string;\n readonly activeKey?: string;\n readonly activeValue?: string | number;\n}\n\n/** Computed layout: bars + scales. */\nexport interface BarLayoutResult {\n readonly bars: readonly BarRect[];\n readonly categoryScale: ReturnType<typeof scaleBand<string>>;\n readonly valueScale: ReturnType<typeof scaleLinear<number, number>>;\n readonly categories: readonly string[];\n}\n\n/** Read a numeric value from a datum, tolerating strings. */\nfunction readNumber(datum: ChartDatum, key: string): number {\n const raw = datum[key];\n if (typeof raw === 'number' && Number.isFinite(raw)) {\n return raw;\n }\n if (typeof raw === 'string') {\n const n = Number(raw);\n return Number.isFinite(n) ? n : 0;\n }\n return 0;\n}\n\nfunction resolveBarColor(datum: ChartDatum, seriesKey: string, colorKey?: string): string {\n if (!colorKey) {\n return seriesColorVar(seriesKey);\n }\n\n const raw = datum[colorKey];\n if (typeof raw !== 'string' || raw.length === 0) {\n return seriesColorVar(seriesKey);\n }\n\n if (\n raw.startsWith('var(') ||\n raw.startsWith('#') ||\n raw.startsWith('rgb') ||\n raw.startsWith('hsl') ||\n raw.includes('(')\n ) {\n return raw;\n }\n\n return seriesColorVar(raw);\n}\n\nfunction isActiveBar(datum: ChartDatum, activeKey?: string, activeValue?: string | number): boolean {\n if (!activeKey || activeValue === undefined) {\n return false;\n }\n\n const value = datum[activeKey];\n if (typeof value === 'number' && typeof activeValue === 'number') {\n return value === activeValue;\n }\n\n return String(value ?? '') === String(activeValue);\n}\n\n/** Build all bar rectangles for the given config. */\nexport function computeBarLayout(input: BarLayoutInput): BarLayoutResult {\n const {\n data,\n xKey,\n seriesKeys,\n variant,\n orientation,\n innerWidth,\n innerHeight,\n bandPadding,\n groupPadding,\n colorKey,\n activeKey,\n activeValue,\n } = input;\n\n const categories = data.map((d) => String(d[xKey] ?? ''));\n const isVertical = orientation === 'vertical';\n\n const categoryScale = scaleBand<string>()\n .domain(categories)\n .range(isVertical ? [0, innerWidth] : [0, innerHeight])\n .padding(bandPadding);\n\n const valueScale = scaleLinear<number, number>();\n\n if (variant === 'stacked' && seriesKeys.length > 0) {\n return stackedLayout({\n data,\n xKey,\n seriesKeys,\n orientation,\n innerWidth,\n innerHeight,\n categoryScale,\n valueScale,\n categories,\n colorKey,\n activeKey,\n activeValue,\n });\n }\n\n return groupedLayout({\n data,\n xKey,\n seriesKeys,\n orientation,\n innerWidth,\n innerHeight,\n categoryScale,\n valueScale,\n groupPadding,\n categories,\n colorKey,\n activeKey,\n activeValue,\n });\n}\n\n// ---------- Grouped ----------\n\ninterface GroupedInput {\n data: readonly ChartDatum[];\n xKey: string;\n seriesKeys: readonly string[];\n orientation: ChartOrientation;\n innerWidth: number;\n innerHeight: number;\n categoryScale: ReturnType<typeof scaleBand<string>>;\n valueScale: ReturnType<typeof scaleLinear<number, number>>;\n groupPadding: number;\n categories: readonly string[];\n colorKey?: string;\n activeKey?: string;\n activeValue?: string | number;\n}\n\nfunction groupedLayout(input: GroupedInput): BarLayoutResult {\n const {\n data,\n seriesKeys,\n orientation,\n innerWidth,\n innerHeight,\n categoryScale,\n valueScale,\n groupPadding,\n categories,\n colorKey,\n activeKey,\n activeValue,\n } = input;\n\n const isVertical = orientation === 'vertical';\n const minValue = d3min(data, (d) => d3min(seriesKeys, (k) => readNumber(d, k)) ?? 0) ?? 0;\n const maxValue = d3max(data, (d) => d3max(seriesKeys, (k) => readNumber(d, k)) ?? 0) ?? 0;\n const domainMin = Math.min(0, minValue);\n const domainMax = Math.max(0, maxValue, domainMin === 0 ? 1 : 0);\n\n valueScale\n .domain([domainMin, domainMax])\n .nice()\n .range(isVertical ? [innerHeight, 0] : [0, innerWidth]);\n\n const baseline = valueScale(0);\n\n const subScale = scaleBand<string>()\n .domain(seriesKeys as string[])\n .range([0, categoryScale.bandwidth()])\n .padding(groupPadding);\n\n const bars: BarRect[] = [];\n data.forEach((datum, datumIndex) => {\n const category = categories[datumIndex];\n const bandStart = categoryScale(category) ?? 0;\n seriesKeys.forEach((seriesKey) => {\n const value = readNumber(datum, seriesKey);\n const sub = subScale(seriesKey) ?? 0;\n const scaledValue = valueScale(value);\n const color = resolveBarColor(datum, seriesKey, colorKey);\n const active = isActiveBar(datum, activeKey, activeValue);\n\n const rect: BarRect = isVertical\n ? {\n key: `${datumIndex}-${seriesKey}`,\n seriesKey,\n datumIndex,\n category,\n value,\n x: bandStart + sub,\n y: Math.min(scaledValue, baseline),\n width: subScale.bandwidth(),\n height: Math.abs(baseline - scaledValue),\n color,\n active,\n }\n : {\n key: `${datumIndex}-${seriesKey}`,\n seriesKey,\n datumIndex,\n category,\n value,\n x: Math.min(scaledValue, baseline),\n y: bandStart + sub,\n width: Math.abs(baseline - scaledValue),\n height: subScale.bandwidth(),\n color,\n active,\n };\n bars.push(rect);\n });\n });\n\n return { bars, categoryScale, valueScale, categories };\n}\n\n// ---------- Stacked ----------\n\ninterface StackedInput {\n data: readonly ChartDatum[];\n xKey: string;\n seriesKeys: readonly string[];\n orientation: ChartOrientation;\n innerWidth: number;\n innerHeight: number;\n categoryScale: ReturnType<typeof scaleBand<string>>;\n valueScale: ReturnType<typeof scaleLinear<number, number>>;\n categories: readonly string[];\n colorKey?: string;\n activeKey?: string;\n activeValue?: string | number;\n}\n\nfunction stackedLayout(input: StackedInput): BarLayoutResult {\n const {\n data,\n seriesKeys,\n orientation,\n innerWidth,\n innerHeight,\n categoryScale,\n valueScale,\n categories,\n colorKey,\n activeKey,\n activeValue,\n } = input;\n\n const isVertical = orientation === 'vertical';\n const normalized = data.map((d) => {\n const out: Record<string, number> = {};\n for (const k of seriesKeys) {\n out[k] = readNumber(d, k);\n }\n return out;\n });\n\n const series: Series<Record<string, number>, string>[] = d3stack<Record<string, number>, string>().keys(\n seriesKeys as string[],\n )(normalized);\n\n const maxTotal = d3max(series[series.length - 1] ?? [], (p) => p[1]) ?? 0;\n valueScale\n .domain([0, maxTotal === 0 ? 1 : maxTotal])\n .nice()\n .range(isVertical ? [innerHeight, 0] : [0, innerWidth]);\n\n const bars: BarRect[] = [];\n series.forEach((layer) => {\n const seriesKey = layer.key;\n layer.forEach((point: SeriesPoint<Record<string, number>>, datumIndex: number) => {\n const [lower, upper] = point;\n const value = upper - lower;\n const category = categories[datumIndex];\n const bandStart = categoryScale(category) ?? 0;\n const color = resolveBarColor(data[datumIndex], seriesKey, colorKey);\n const active = isActiveBar(data[datumIndex], activeKey, activeValue);\n\n const rect: BarRect = isVertical\n ? {\n key: `${datumIndex}-${seriesKey}`,\n seriesKey,\n datumIndex,\n category,\n value,\n x: bandStart,\n y: valueScale(upper),\n width: categoryScale.bandwidth(),\n height: valueScale(lower) - valueScale(upper),\n color,\n active,\n }\n : {\n key: `${datumIndex}-${seriesKey}`,\n seriesKey,\n datumIndex,\n category,\n value,\n x: valueScale(lower),\n y: bandStart,\n width: valueScale(upper) - valueScale(lower),\n height: categoryScale.bandwidth(),\n color,\n active,\n };\n bars.push(rect);\n });\n });\n\n return { bars, categoryScale, valueScale, categories };\n}\n","import type { ChartOrientation, ChartStyleVariant } from '@ojiepermana/angular-chart/core';\nimport type { BarRect } from './bar-layout';\n\n/**\n * Styles supported by the bar family.\n *\n * - `base` — classic solid rectangles.\n * - `dot` — dot-matrix rendering: each bar becomes a stack of small rounded\n * cells, on top of a faint full-height cell track. Colors only reference\n * theme CSS variables (`--color-<key>` per series, `--muted` for the track),\n * so the style follows the active theme without touching the theme library.\n */\nexport type BarChartStyle = ChartStyleVariant | 'dot';\n\n/** A faint background cell of the dot-matrix track. */\nexport interface BarDotTrackCell {\n readonly key: string;\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\n/** A filled (value) cell of the dot-matrix style. */\nexport interface BarDotValueCell extends BarDotTrackCell {\n readonly seriesKey: string;\n readonly datumIndex: number;\n readonly color: string;\n readonly active: boolean;\n}\n\n/** Inputs required to compute the dot-matrix cell layout. */\nexport interface BarDotLayoutInput {\n readonly bars: readonly BarRect[];\n readonly orientation: ChartOrientation;\n readonly innerWidth: number;\n readonly innerHeight: number;\n /** Pixel position of value 0 on the value axis (`valueScale(0)`). */\n readonly baseline: number;\n /** Cell length along the value axis. Defaults to the bar thickness (square cells). */\n readonly dotSize?: number;\n /** Gap between consecutive cells along the value axis. */\n readonly dotGap: number;\n}\n\n/** Computed dot-matrix layout: faint track cells + filled value cells. */\nexport interface BarDotLayoutResult {\n readonly track: readonly BarDotTrackCell[];\n readonly values: readonly BarDotValueCell[];\n}\n\n/** Hard cap so degenerate inputs (tiny `dotSize`) cannot explode the DOM. */\nconst MAX_ROWS_PER_COLUMN = 400;\nconst EDGE_TOLERANCE = 0.5;\n\ninterface DotColumn {\n /** Cross-axis start (x for vertical, y for horizontal). */\n readonly pos: number;\n /** Cross-axis thickness. */\n readonly thickness: number;\n readonly bars: BarRect[];\n}\n\n/**\n * Build the dot-matrix cells for the `dot` bar style.\n *\n * Cells tile a global grid anchored at the value baseline, so stacked\n * segments snap to the same rows and never overlap. A bar fills every cell\n * whose center lies inside its value range; bars too short to cover a center\n * still claim the cell nearest their midpoint when it is free.\n */\nexport function computeBarDotCells(input: BarDotLayoutInput): BarDotLayoutResult {\n const { bars, orientation, innerWidth, innerHeight, baseline, dotSize, dotGap } = input;\n const isVertical = orientation === 'vertical';\n const innerLength = isVertical ? innerHeight : innerWidth;\n\n const track: BarDotTrackCell[] = [];\n const values: BarDotValueCell[] = [];\n\n if (innerLength <= 0 || bars.length === 0) {\n return { track, values };\n }\n\n const columns = groupColumns(bars, isVertical);\n\n columns.forEach((column, columnIndex) => {\n const cellLength = dotSize ?? column.thickness;\n const step = cellLength + dotGap;\n if (cellLength <= 0 || step <= EDGE_TOLERANCE) {\n return;\n }\n\n // Signed row index r anchored at the baseline: r = 0 is the first cell on\n // the positive-value side, negative r tiles the negative side.\n // `rowStart(r)` is the cell's lower main-axis coordinate (top edge for\n // vertical, left edge for horizontal); `rowAt(c)` is the fractional row\n // whose cell center sits at coordinate c.\n const rowStart = (r: number): number => (isVertical ? baseline - r * step - cellLength : baseline + r * step);\n const rowAt = (c: number): number =>\n isVertical ? (baseline - c - cellLength / 2) / step : (c - baseline - cellLength / 2) / step;\n\n // Rows whose cell lies fully inside the plot area.\n let rMin = Math.ceil(\n isVertical ? (baseline - innerLength - EDGE_TOLERANCE) / step : (-baseline - EDGE_TOLERANCE) / step,\n );\n let rMax = Math.floor(\n isVertical\n ? (baseline - cellLength + EDGE_TOLERANCE) / step\n : (innerLength - baseline - cellLength + EDGE_TOLERANCE) / step,\n );\n if (rMax - rMin + 1 > MAX_ROWS_PER_COLUMN) {\n rMax = rMin + MAX_ROWS_PER_COLUMN - 1;\n }\n\n const cellRect = (r: number): { x: number; y: number; width: number; height: number } =>\n isVertical\n ? { x: column.pos, y: rowStart(r), width: column.thickness, height: cellLength }\n : { x: rowStart(r), y: column.pos, width: cellLength, height: column.thickness };\n\n for (let r = rMin; r <= rMax; r++) {\n track.push({ key: `${columnIndex}:${r}`, ...cellRect(r) });\n }\n\n const usedRows = new Set<number>();\n for (const bar of column.bars) {\n const barLength = isVertical ? bar.height : bar.width;\n if (barLength <= EDGE_TOLERANCE) {\n continue;\n }\n const barStart = isVertical ? bar.y : bar.x;\n const barEnd = barStart + barLength;\n\n // Rows whose cell center falls inside [barStart, barEnd] (± tolerance).\n const rA = rowAt(barStart);\n const rB = rowAt(barEnd);\n const first = Math.max(Math.ceil(Math.min(rA, rB) - EDGE_TOLERANCE / step), rMin);\n const last = Math.min(Math.floor(Math.max(rA, rB) + EDGE_TOLERANCE / step), rMax);\n\n const rows: number[] = [];\n for (let r = first; r <= last; r++) {\n rows.push(r);\n }\n\n // Guarantee visibility: a non-zero bar shorter than one cell claims the\n // row nearest its midpoint when that row is still free.\n if (rows.length === 0) {\n const r = Math.round(rowAt(barStart + barLength / 2));\n if (r >= rMin && r <= rMax && !usedRows.has(r)) {\n rows.push(r);\n }\n }\n\n for (const r of rows) {\n if (usedRows.has(r)) {\n continue;\n }\n usedRows.add(r);\n values.push({\n key: `${bar.key}:${r}`,\n ...cellRect(r),\n seriesKey: bar.seriesKey,\n datumIndex: bar.datumIndex,\n color: bar.color,\n active: bar.active,\n });\n }\n }\n });\n\n return { track, values };\n}\n\n/** Group bars sharing the same cross-axis band into one cell column. */\nfunction groupColumns(bars: readonly BarRect[], isVertical: boolean): DotColumn[] {\n const map = new Map<string, DotColumn>();\n for (const bar of bars) {\n const pos = isVertical ? bar.x : bar.y;\n const thickness = isVertical ? bar.width : bar.height;\n if (thickness <= 0) {\n continue;\n }\n const key = `${pos.toFixed(2)}:${thickness.toFixed(2)}`;\n const existing = map.get(key);\n if (existing) {\n existing.bars.push(bar);\n } else {\n map.set(key, { pos, thickness, bars: [bar] });\n }\n }\n return [...map.values()];\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output } from '@angular/core';\nimport { ChartContext } from '@ojiepermana/angular-chart/core';\nimport { CartesianContext, type ChartDatum, type ChartMargin, type ChartOrientation } from '@ojiepermana/angular-chart/core';\nimport { computeBarLayout, type BarRect, type BarVariant } from './bar-layout';\nimport { computeBarDotCells, type BarChartStyle, type BarDotLayoutResult, type BarDotValueCell } from './bar-dot';\nimport { ChartPointerTracker } from '@ojiepermana/angular-chart/primitives';\nimport { elementClientCenter } from '@ojiepermana/angular-chart/core';\n\nconst DEFAULT_MARGIN: ChartMargin = { top: 8, right: 8, bottom: 24, left: 40 };\nconst defaultBarValueFormatter = (value: number): string => `${value}`;\n\n/** Event emitted when a user clicks a bar. */\nexport interface BarClickEvent {\n readonly seriesKey: string;\n readonly datumIndex: number;\n readonly category: string;\n readonly value: number;\n readonly datum: ChartDatum;\n}\n\n/**\n * Bar chart — composable within `<Chart>`.\n *\n * Layout variants (via inputs):\n * - `orientation`: `'vertical'` (default) or `'horizontal'`\n * - `variant`: `'grouped'` (default) or `'stacked'`\n * - `styles`: `'base'` (default) or `'dot'` (dot-matrix cells)\n */\n@Component({\n selector: 'ChartBar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CartesianContext],\n imports: [ChartPointerTracker],\n host: { class: 'relative block h-full w-full', '[attr.data-style]': 'styles()' },\n template: `\n <svg:svg\n ChartPointerTracker\n class=\"block h-full w-full overflow-visible\"\n [attr.viewBox]=\"viewBox()\"\n preserveAspectRatio=\"none\"\n role=\"img\"\n [attr.aria-label]=\"ariaSummary()\">\n <svg:g [attr.transform]=\"innerTransform()\">\n <ng-content select=\"svg\\\\:g[ChartGrid]\" />\n <svg:g class=\"chart-bars\">\n @if (styles() === 'dot') {\n <svg:g class=\"chart-bar-dots\" aria-hidden=\"true\">\n @for (cell of dotTrackCells(); track cell.key) {\n <svg:rect\n class=\"chart-bar-dot-track\"\n [attr.x]=\"cell.x\"\n [attr.y]=\"cell.y\"\n [attr.width]=\"cell.width\"\n [attr.height]=\"cell.height\"\n [attr.rx]=\"dotCornerRadius()\"\n [attr.ry]=\"dotCornerRadius()\"\n fill=\"hsl(var(--muted))\" />\n }\n @for (cell of dotValueCells(); track cell.key) {\n <svg:rect\n class=\"chart-bar-dot-value\"\n [attr.x]=\"cell.x\"\n [attr.y]=\"cell.y\"\n [attr.width]=\"cell.width\"\n [attr.height]=\"cell.height\"\n [attr.rx]=\"dotCornerRadius()\"\n [attr.ry]=\"dotCornerRadius()\"\n [attr.fill]=\"cell.color\"\n [attr.opacity]=\"dotCellOpacity(cell)\" />\n }\n </svg:g>\n }\n @for (bar of bars(); track bar.key) {\n <svg:rect\n class=\"chart-bar cursor-pointer outline-none transition-opacity hover:opacity-80\"\n [attr.x]=\"bar.x\"\n [attr.y]=\"bar.y\"\n [attr.width]=\"bar.width\"\n [attr.height]=\"bar.height\"\n [attr.rx]=\"cornerRadius()\"\n [attr.ry]=\"cornerRadius()\"\n [attr.fill]=\"barFill(bar)\"\n [attr.opacity]=\"barOpacity(bar)\"\n [attr.stroke]=\"bar.active ? 'hsl(var(--foreground))' : null\"\n [attr.stroke-width]=\"bar.active ? 1.5 : null\"\n [attr.aria-label]=\"barAriaLabel(bar)\"\n tabindex=\"0\"\n (focus)=\"setActivePoint($event, bar)\"\n (blur)=\"clearActivePoint()\"\n (click)=\"emitClick(bar)\"\n (keydown.enter)=\"emitClick(bar)\"\n (keydown.space)=\"emitClick(bar); $event.preventDefault()\" />\n @if (showValueLabels() && bar.height > 0 && bar.width > 0) {\n <svg:text\n class=\"chart-bar-value pointer-events-none fill-muted-foreground text-2xs\"\n [attr.x]=\"barLabelX(bar)\"\n [attr.y]=\"barLabelY(bar)\"\n [attr.text-anchor]=\"barLabelAnchor(bar)\"\n dominant-baseline=\"middle\">\n {{ formatValueLabel(bar) }}\n </svg:text>\n }\n }\n </svg:g>\n <ng-content select=\"svg\\\\:g[ChartAxisX]\" />\n <ng-content select=\"svg\\\\:g[ChartAxisY]\" />\n <ng-content select=\"svg\\\\:g[ChartCrosshair]\" />\n <ng-content />\n </svg:g>\n </svg:svg>\n <ng-content select=\"ChartTooltip\" />\n <ng-content select=\"ChartLegend\" />\n `,\n})\nexport class BarChart {\n private readonly root = inject(ChartContext);\n private readonly cart = inject(CartesianContext);\n\n readonly data = input.required<readonly ChartDatum[]>();\n readonly xKey = input.required<string>();\n readonly orientation = input<ChartOrientation>('vertical');\n readonly variant = input<BarVariant>('grouped');\n readonly styles = input<BarChartStyle>('base');\n readonly margin = input<ChartMargin>(DEFAULT_MARGIN);\n readonly bandPadding = input<number>(0.2);\n readonly groupPadding = input<number>(0.05);\n readonly cornerRadius = input<number>(4);\n readonly colorKey = input<string | undefined>(undefined);\n readonly activeKey = input<string | undefined>(undefined);\n readonly activeValue = input<string | number | undefined>(undefined);\n readonly showValueLabels = input<boolean>(false);\n readonly valueLabelFormat = input<(value: number) => string>(defaultBarValueFormatter);\n /** Cell length along the value axis for the `dot` style; defaults to the bar thickness. */\n readonly dotSize = input<number | undefined>(undefined);\n /** Gap between consecutive cells along the value axis for the `dot` style. */\n readonly dotGap = input<number>(2);\n /** Corner radius of each `dot` cell. */\n readonly dotCornerRadius = input<number>(2);\n /** Render the faint full-height cell track behind the `dot` values. */\n readonly showDotTrack = input<boolean>(true);\n\n readonly barClick = output<BarClickEvent>();\n\n protected readonly innerWidth = computed(() =>\n Math.max(0, this.root.dimensions().width - this.margin().left - this.margin().right),\n );\n\n protected readonly innerHeight = computed(() =>\n Math.max(0, this.root.dimensions().height - this.margin().top - this.margin().bottom),\n );\n\n protected readonly layout = computed(() =>\n computeBarLayout({\n data: this.data(),\n xKey: this.xKey(),\n seriesKeys: this.root.visibleSeriesKeys(),\n variant: this.variant(),\n orientation: this.orientation(),\n innerWidth: this.innerWidth(),\n innerHeight: this.innerHeight(),\n bandPadding: this.bandPadding(),\n groupPadding: this.groupPadding(),\n colorKey: this.colorKey(),\n activeKey: this.activeKey(),\n activeValue: this.activeValue(),\n }),\n );\n\n protected readonly bars = computed<readonly BarRect[]>(() => this.layout().bars);\n\n protected readonly dotLayout = computed<BarDotLayoutResult | null>(() => {\n if (this.styles() !== 'dot') {\n return null;\n }\n const layout = this.layout();\n return computeBarDotCells({\n bars: layout.bars,\n orientation: this.orientation(),\n innerWidth: this.innerWidth(),\n innerHeight: this.innerHeight(),\n baseline: layout.valueScale(0),\n dotSize: this.dotSize(),\n dotGap: this.dotGap(),\n });\n });\n\n protected readonly dotTrackCells = computed(() => (this.showDotTrack() ? (this.dotLayout()?.track ?? []) : []));\n\n protected readonly dotValueCells = computed(() => this.dotLayout()?.values ?? []);\n\n protected readonly viewBox = computed(() => {\n const { width, height } = this.root.dimensions();\n return `0 0 ${Math.max(0, width)} ${Math.max(0, height)}`;\n });\n\n protected readonly innerTransform = computed(() => `translate(${this.margin().left},${this.margin().top})`);\n\n protected readonly ariaSummary = computed(() => {\n const keys = this.root.visibleSeriesKeys();\n const n = this.data().length;\n return `Bar chart, ${n} categories, ${keys.length} series: ${keys.join(', ')}.`;\n });\n\n constructor() {\n effect(() => {\n const layout = this.layout();\n this.cart.orientation.set(this.orientation());\n this.cart.margin.set(this.margin());\n this.cart.innerWidth.set(this.innerWidth());\n this.cart.innerHeight.set(this.innerHeight());\n this.cart.categoryScale.set(layout.categoryScale);\n this.cart.valueScale.set(layout.valueScale);\n this.cart.categories.set(layout.categories);\n });\n }\n\n protected emitClick(bar: BarRect): void {\n this.barClick.emit({\n seriesKey: bar.seriesKey,\n datumIndex: bar.datumIndex,\n category: bar.category,\n value: bar.value,\n datum: this.data()[bar.datumIndex],\n });\n }\n\n protected setActivePoint(event: FocusEvent, bar: BarRect): void {\n const center = elementClientCenter(event.currentTarget);\n this.root.activePoint.set({\n index: bar.datumIndex,\n seriesKey: bar.seriesKey,\n clientX: center?.clientX,\n clientY: center?.clientY,\n });\n }\n\n protected clearActivePoint(): void {\n this.root.activePoint.set(null);\n }\n\n protected barOpacity(bar: BarRect): number {\n return this.emphasisOpacity(bar.active);\n }\n\n protected dotCellOpacity(cell: BarDotValueCell): number {\n return this.emphasisOpacity(cell.active);\n }\n\n /** In `dot` style the bar rect stays as an invisible interaction target. */\n protected barFill(bar: BarRect): string {\n return this.styles() === 'dot' ? 'transparent' : bar.color;\n }\n\n private emphasisOpacity(active: boolean): number {\n return this.activeKey() && this.activeValue() !== undefined ? (active ? 1 : 0.42) : 1;\n }\n\n protected formatValueLabel(bar: BarRect): string {\n return this.valueLabelFormat()(bar.value);\n }\n\n protected barLabelX(bar: BarRect): number {\n if (this.orientation() === 'vertical') {\n return bar.x + bar.width / 2;\n }\n\n return bar.value >= 0 ? bar.x + bar.width + 6 : bar.x - 6;\n }\n\n protected barLabelY(bar: BarRect): number {\n if (this.orientation() === 'vertical') {\n return bar.value >= 0 ? bar.y - 8 : bar.y + bar.height + 10;\n }\n\n return bar.y + bar.height / 2;\n }\n\n protected barLabelAnchor(bar: BarRect): 'middle' | 'start' | 'end' {\n if (this.orientation() === 'vertical') {\n return 'middle';\n }\n\n return bar.value >= 0 ? 'start' : 'end';\n }\n\n protected barAriaLabel(bar: BarRect): string {\n const label = this.root.config()[bar.seriesKey]?.label ?? bar.seriesKey;\n return `${label} in ${bar.category}: ${bar.value}`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["d3min","d3max","d3stack"],"mappings":"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"}
|