@wallarm-org/design-system 4.1.0 → 4.2.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.
@@ -0,0 +1,28 @@
1
+ import type { HTMLAttributes, ReactElement, Ref } from 'react';
2
+ import { type TestableProps } from '../../../utils/testId.js';
3
+ import { type LineChartDatum, type LineChartSeries } from '../LineChart/LineChartContext.js';
4
+ /**
5
+ * Generic over the datum shape, as `LineChart<T>`: pass a concrete datum interface and
6
+ * `xKey` / `series[].key` become compile-time-checked keys of it.
7
+ */
8
+ export interface ColumnChartProps<T extends LineChartDatum = LineChartDatum> extends HTMLAttributes<HTMLDivElement>, TestableProps {
9
+ ref?: Ref<HTMLDivElement>;
10
+ /** One entry per column (step), sorted ascending by `xKey`. */
11
+ data: T[];
12
+ /**
13
+ * The categories each column is split into, in legend order — the first one stacks on top.
14
+ * The same schema drives the legend, the parts and the hover popover rows.
15
+ */
16
+ series: LineChartSeries<Extract<keyof T, string>>[];
17
+ /** Key on each datum used as the X-axis value (the step: a day, an hour, …). */
18
+ xKey: Extract<keyof T, string>;
19
+ }
20
+ /**
21
+ * Vertical stacked columns: a column per step, split by category. Built on the `LineChart`
22
+ * contexts, so `LineChartLegend` / `LineChartLegendItem`, `LineChartGrid`, `LineChartYAxis`
23
+ * and `LineChartTooltip` compose inside it unchanged.
24
+ */
25
+ export declare function ColumnChart<T extends LineChartDatum = LineChartDatum>({ data, series, xKey, className, children, ref, 'data-testid': testId, ...props }: ColumnChartProps<T>): ReactElement;
26
+ export declare namespace ColumnChart {
27
+ var displayName: string;
28
+ }
@@ -0,0 +1,163 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { c } from "react/compiler-runtime";
3
+ import { cn } from "../../../utils/cn.js";
4
+ import { TestIdProvider } from "../../../utils/testId.js";
5
+ import { useLineChartActiveKey } from "../LineChart/hooks/useLineChartActiveKey.js";
6
+ import { useLineChartDataWarnings } from "../LineChart/hooks/useLineChartDataWarnings.js";
7
+ import { EMPTY_HIDDEN_SET, LineChartActiveContext, LineChartDataContext } from "../LineChart/LineChartContext.js";
8
+ import { columnChartRootClasses } from "./classes.js";
9
+ const noop = ()=>void 0;
10
+ function ColumnChart(t0) {
11
+ const $ = c(42);
12
+ let children;
13
+ let className;
14
+ let data;
15
+ let props;
16
+ let ref;
17
+ let series;
18
+ let testId;
19
+ let xKey;
20
+ if ($[0] !== t0) {
21
+ ({ data, series, xKey, className, children, ref, "data-testid": testId, ...props } = t0);
22
+ $[0] = t0;
23
+ $[1] = children;
24
+ $[2] = className;
25
+ $[3] = data;
26
+ $[4] = props;
27
+ $[5] = ref;
28
+ $[6] = series;
29
+ $[7] = testId;
30
+ $[8] = xKey;
31
+ } else {
32
+ children = $[1];
33
+ className = $[2];
34
+ data = $[3];
35
+ props = $[4];
36
+ ref = $[5];
37
+ series = $[6];
38
+ testId = $[7];
39
+ xKey = $[8];
40
+ }
41
+ let t1;
42
+ if ($[9] !== series) {
43
+ t1 = new Map(series.map(_temp));
44
+ $[9] = series;
45
+ $[10] = t1;
46
+ } else t1 = $[10];
47
+ const seriesByKey = t1;
48
+ let t2;
49
+ if ($[11] !== data || $[12] !== series || $[13] !== xKey) {
50
+ t2 = {
51
+ data,
52
+ series,
53
+ xKey
54
+ };
55
+ $[11] = data;
56
+ $[12] = series;
57
+ $[13] = xKey;
58
+ $[14] = t2;
59
+ } else t2 = $[14];
60
+ useLineChartDataWarnings(t2);
61
+ let t3;
62
+ if ($[15] !== seriesByKey) {
63
+ t3 = {
64
+ controlledActiveKey: void 0,
65
+ onActiveKeyChange: void 0,
66
+ seriesByKey
67
+ };
68
+ $[15] = seriesByKey;
69
+ $[16] = t3;
70
+ } else t3 = $[16];
71
+ const { activeKey, setActiveKey } = useLineChartActiveKey(t3);
72
+ let t4;
73
+ if ($[17] !== data || $[18] !== series || $[19] !== seriesByKey || $[20] !== setActiveKey || $[21] !== xKey) {
74
+ t4 = {
75
+ data,
76
+ series,
77
+ seriesByKey,
78
+ xKey,
79
+ hiddenSet: EMPTY_HIDDEN_SET,
80
+ setActiveKey,
81
+ emitZoom: noop,
82
+ syncId: void 0,
83
+ syncMethod: void 0
84
+ };
85
+ $[17] = data;
86
+ $[18] = series;
87
+ $[19] = seriesByKey;
88
+ $[20] = setActiveKey;
89
+ $[21] = xKey;
90
+ $[22] = t4;
91
+ } else t4 = $[22];
92
+ const dataValue = t4;
93
+ let t5;
94
+ if ($[23] !== activeKey) {
95
+ t5 = {
96
+ activeKey
97
+ };
98
+ $[23] = activeKey;
99
+ $[24] = t5;
100
+ } else t5 = $[24];
101
+ let t6;
102
+ if ($[25] !== className) {
103
+ t6 = cn(columnChartRootClasses, className);
104
+ $[25] = className;
105
+ $[26] = t6;
106
+ } else t6 = $[26];
107
+ let t7;
108
+ if ($[27] !== children || $[28] !== props || $[29] !== ref || $[30] !== t6 || $[31] !== testId) {
109
+ t7 = /*#__PURE__*/ jsx("div", {
110
+ ...props,
111
+ ref: ref,
112
+ "data-slot": "column-chart",
113
+ "data-testid": testId,
114
+ className: t6,
115
+ children: children
116
+ });
117
+ $[27] = children;
118
+ $[28] = props;
119
+ $[29] = ref;
120
+ $[30] = t6;
121
+ $[31] = testId;
122
+ $[32] = t7;
123
+ } else t7 = $[32];
124
+ let t8;
125
+ if ($[33] !== t7 || $[34] !== testId) {
126
+ t8 = /*#__PURE__*/ jsx(TestIdProvider, {
127
+ value: testId,
128
+ children: t7
129
+ });
130
+ $[33] = t7;
131
+ $[34] = testId;
132
+ $[35] = t8;
133
+ } else t8 = $[35];
134
+ let t9;
135
+ if ($[36] !== t5 || $[37] !== t8) {
136
+ t9 = /*#__PURE__*/ jsx(LineChartActiveContext.Provider, {
137
+ value: t5,
138
+ children: t8
139
+ });
140
+ $[36] = t5;
141
+ $[37] = t8;
142
+ $[38] = t9;
143
+ } else t9 = $[38];
144
+ let t10;
145
+ if ($[39] !== dataValue || $[40] !== t9) {
146
+ t10 = /*#__PURE__*/ jsx(LineChartDataContext.Provider, {
147
+ value: dataValue,
148
+ children: t9
149
+ });
150
+ $[39] = dataValue;
151
+ $[40] = t9;
152
+ $[41] = t10;
153
+ } else t10 = $[41];
154
+ return t10;
155
+ }
156
+ function _temp(s) {
157
+ return [
158
+ s.key,
159
+ s
160
+ ];
161
+ }
162
+ ColumnChart.displayName = "ColumnChart";
163
+ export { ColumnChart };
@@ -0,0 +1,9 @@
1
+ import { type FC, type HTMLAttributes, type ReactNode, type Ref } from 'react';
2
+ export interface ColumnChartBodyProps extends HTMLAttributes<HTMLDivElement> {
3
+ ref?: Ref<HTMLDivElement>;
4
+ /** Plot slots — `<LineChartGrid>`, `<ColumnChartXAxis>`, `<LineChartYAxis>`, `<ColumnChartStack>`, `<LineChartTooltip>`. */
5
+ children?: ReactNode;
6
+ /** Plot height passed to recharts' `<ResponsiveContainer>`. Defaults to the Figma 164px. */
7
+ height?: number;
8
+ }
9
+ export declare const ColumnChartBody: FC<ColumnChartBodyProps>;
@@ -0,0 +1,92 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { c } from "react/compiler-runtime";
3
+ import { useContext } from "react";
4
+ import { ComposedChart, ResponsiveContainer } from "recharts";
5
+ import { cn } from "../../../utils/cn.js";
6
+ import { useTestId } from "../../../utils/testId.js";
7
+ import { LineChartDataContext } from "../LineChart/LineChartContext.js";
8
+ import { columnChartBodyClasses } from "./classes.js";
9
+ import { COLUMN_CARD_HEIGHT, COLUMN_DEFAULT_BODY_MARGIN, COLUMN_HEADER_HEIGHT } from "./constants.js";
10
+ const DEFAULT_BODY_HEIGHT = COLUMN_CARD_HEIGHT - COLUMN_HEADER_HEIGHT;
11
+ const ColumnChartBody = (t0)=>{
12
+ const $ = c(22);
13
+ let children;
14
+ let className;
15
+ let props;
16
+ let ref;
17
+ let t1;
18
+ if ($[0] !== t0) {
19
+ ({ height: t1, className, ref, children, ...props } = t0);
20
+ $[0] = t0;
21
+ $[1] = children;
22
+ $[2] = className;
23
+ $[3] = props;
24
+ $[4] = ref;
25
+ $[5] = t1;
26
+ } else {
27
+ children = $[1];
28
+ className = $[2];
29
+ props = $[3];
30
+ ref = $[4];
31
+ t1 = $[5];
32
+ }
33
+ const height = void 0 === t1 ? DEFAULT_BODY_HEIGHT : t1;
34
+ const testId = useTestId("body");
35
+ const dataCtx = useContext(LineChartDataContext);
36
+ let t2;
37
+ if ($[6] !== className) {
38
+ t2 = cn(columnChartBodyClasses, className);
39
+ $[6] = className;
40
+ $[7] = t2;
41
+ } else t2 = $[7];
42
+ let t3;
43
+ if ($[8] !== dataCtx?.data) {
44
+ t3 = dataCtx?.data ?? [];
45
+ $[8] = dataCtx?.data;
46
+ $[9] = t3;
47
+ } else t3 = $[9];
48
+ let t4;
49
+ if ($[10] !== children || $[11] !== t3) {
50
+ t4 = /*#__PURE__*/ jsx(ComposedChart, {
51
+ data: t3,
52
+ margin: COLUMN_DEFAULT_BODY_MARGIN,
53
+ accessibilityLayer: false,
54
+ children: children
55
+ });
56
+ $[10] = children;
57
+ $[11] = t3;
58
+ $[12] = t4;
59
+ } else t4 = $[12];
60
+ let t5;
61
+ if ($[13] !== height || $[14] !== t4) {
62
+ t5 = /*#__PURE__*/ jsx(ResponsiveContainer, {
63
+ width: "100%",
64
+ height: height,
65
+ children: t4
66
+ });
67
+ $[13] = height;
68
+ $[14] = t4;
69
+ $[15] = t5;
70
+ } else t5 = $[15];
71
+ let t6;
72
+ if ($[16] !== props || $[17] !== ref || $[18] !== t2 || $[19] !== t5 || $[20] !== testId) {
73
+ t6 = /*#__PURE__*/ jsx("div", {
74
+ ...props,
75
+ ref: ref,
76
+ "data-slot": "column-chart-body",
77
+ "data-testid": testId,
78
+ "aria-hidden": "true",
79
+ className: t2,
80
+ children: t5
81
+ });
82
+ $[16] = props;
83
+ $[17] = ref;
84
+ $[18] = t2;
85
+ $[19] = t5;
86
+ $[20] = testId;
87
+ $[21] = t6;
88
+ } else t6 = $[21];
89
+ return t6;
90
+ };
91
+ ColumnChartBody.displayName = "ColumnChartBody";
92
+ export { ColumnChartBody };
@@ -0,0 +1,7 @@
1
+ import { type FC } from 'react';
2
+ /**
3
+ * The columns: every `series` entry stacked into one column per datum, in legend order with the
4
+ * first series on top. Mount once inside `<ColumnChartBody>`. Column width follows the step
5
+ * (see `resolveColumnWidth`); hovering a legend item fades the other parts out.
6
+ */
7
+ export declare const ColumnChartStack: FC;
@@ -0,0 +1,123 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { c } from "react/compiler-runtime";
3
+ import { useContext } from "react";
4
+ import { Bar, BarStack, usePlotArea } from "recharts";
5
+ import { useTestId } from "../../../utils/testId.js";
6
+ import { LineChartActiveContext, LineChartDataContext } from "../LineChart/LineChartContext.js";
7
+ import { CHART_PALETTE_FILL, resolveChartColor } from "../lib/chartPalette.js";
8
+ import { COLUMN_INACTIVE_OPACITY, COLUMN_PART_GAP, COLUMN_RADIUS } from "./constants.js";
9
+ import { resolveColumnWidth } from "./lib/resolveColumnWidth.js";
10
+ const ColumnChartPart = (t0)=>{
11
+ const $ = c(10);
12
+ const { x, y, width, height, value, fill, seriesKey, active, dimmed, testId } = t0;
13
+ const base = Array.isArray(value) ? Number(value[0]) : 0;
14
+ const partHeight = height - (base > 0 ? COLUMN_PART_GAP : 0);
15
+ if (!(width > 0) || !(partHeight > 0)) return null;
16
+ const t1 = dimmed ? COLUMN_INACTIVE_OPACITY : 1;
17
+ const t2 = active ? "true" : void 0;
18
+ let t3;
19
+ if ($[0] !== fill || $[1] !== partHeight || $[2] !== seriesKey || $[3] !== t1 || $[4] !== t2 || $[5] !== testId || $[6] !== width || $[7] !== x || $[8] !== y) {
20
+ t3 = /*#__PURE__*/ jsx("rect", {
21
+ x: x,
22
+ y: y,
23
+ width: width,
24
+ height: partHeight,
25
+ fill: fill,
26
+ opacity: t1,
27
+ "data-slot": "column-chart-part",
28
+ "data-testid": testId,
29
+ "data-key": seriesKey,
30
+ "data-active": t2
31
+ });
32
+ $[0] = fill;
33
+ $[1] = partHeight;
34
+ $[2] = seriesKey;
35
+ $[3] = t1;
36
+ $[4] = t2;
37
+ $[5] = testId;
38
+ $[6] = width;
39
+ $[7] = x;
40
+ $[8] = y;
41
+ $[9] = t3;
42
+ } else t3 = $[9];
43
+ return t3;
44
+ };
45
+ const ColumnChartStack = ()=>{
46
+ const $ = c(18);
47
+ const dataCtx = useContext(LineChartDataContext);
48
+ const { activeKey } = useContext(LineChartActiveContext);
49
+ const plotArea = usePlotArea();
50
+ const testId = useTestId("part");
51
+ if (!dataCtx) return null;
52
+ const steps = dataCtx.data.length;
53
+ let t0;
54
+ if ($[0] !== plotArea || $[1] !== steps) {
55
+ t0 = plotArea && steps > 0 ? resolveColumnWidth(plotArea.width / steps) : void 0;
56
+ $[0] = plotArea;
57
+ $[1] = steps;
58
+ $[2] = t0;
59
+ } else t0 = $[2];
60
+ const barSize = t0;
61
+ let T0;
62
+ let t1;
63
+ let t2;
64
+ if ($[3] !== activeKey || $[4] !== barSize || $[5] !== dataCtx.series || $[6] !== testId) {
65
+ const stacked = [
66
+ ...dataCtx.series
67
+ ].reverse();
68
+ T0 = BarStack;
69
+ t1 = COLUMN_RADIUS;
70
+ let t3;
71
+ if ($[10] !== activeKey || $[11] !== barSize || $[12] !== testId) {
72
+ t3 = (s)=>{
73
+ const active = activeKey === s.key;
74
+ const dimmed = null !== activeKey && !active;
75
+ return /*#__PURE__*/ jsx(Bar, {
76
+ dataKey: s.key,
77
+ name: s.label,
78
+ barSize: barSize,
79
+ fill: resolveChartColor(s.color) ?? CHART_PALETTE_FILL.slate,
80
+ activeBar: false,
81
+ isAnimationActive: false,
82
+ shape: (props)=>/*#__PURE__*/ jsx(ColumnChartPart, {
83
+ ...props,
84
+ seriesKey: s.key,
85
+ active: active,
86
+ dimmed: dimmed,
87
+ testId: testId
88
+ })
89
+ }, s.key);
90
+ };
91
+ $[10] = activeKey;
92
+ $[11] = barSize;
93
+ $[12] = testId;
94
+ $[13] = t3;
95
+ } else t3 = $[13];
96
+ t2 = stacked.map(t3);
97
+ $[3] = activeKey;
98
+ $[4] = barSize;
99
+ $[5] = dataCtx.series;
100
+ $[6] = testId;
101
+ $[7] = T0;
102
+ $[8] = t1;
103
+ $[9] = t2;
104
+ } else {
105
+ T0 = $[7];
106
+ t1 = $[8];
107
+ t2 = $[9];
108
+ }
109
+ let t3;
110
+ if ($[14] !== T0 || $[15] !== t1 || $[16] !== t2) {
111
+ t3 = /*#__PURE__*/ jsx(T0, {
112
+ radius: t1,
113
+ children: t2
114
+ });
115
+ $[14] = T0;
116
+ $[15] = t1;
117
+ $[16] = t2;
118
+ $[17] = t3;
119
+ } else t3 = $[17];
120
+ return t3;
121
+ };
122
+ ColumnChartStack.displayName = "ColumnChartStack";
123
+ export { ColumnChartStack };
@@ -0,0 +1,13 @@
1
+ import { type FC } from 'react';
2
+ export interface ColumnChartXAxisProps {
3
+ /** Format the rendered tick label. Receives the raw `xKey` value of the column. */
4
+ tickFormatter?: (value: unknown, index: number) => string;
5
+ /**
6
+ * Recharts tick interval. Defaults to `'preserveStartEnd'`: the first and last columns keep
7
+ * their labels and middle ones drop out when the labels would collide. `0` labels every column.
8
+ */
9
+ interval?: number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd';
10
+ /** Minimum gap (in pixels) between rendered tick labels. */
11
+ minTickGap?: number;
12
+ }
13
+ export declare const ColumnChartXAxis: FC<ColumnChartXAxisProps>;
@@ -0,0 +1,40 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { c } from "react/compiler-runtime";
3
+ import { useContext } from "react";
4
+ import { XAxis } from "recharts";
5
+ import { LINE_X_LABEL_HEIGHT } from "../LineChart/constants.js";
6
+ import { LineChartDataContext } from "../LineChart/LineChartContext.js";
7
+ import { renderAxisTick } from "../LineChart/lib/renderAxisTick.js";
8
+ const AXIS_LINE_PROPS = {
9
+ stroke: "var(--color-border-primary-light)"
10
+ };
11
+ const renderTick = renderAxisTick();
12
+ const ColumnChartXAxis = (t0)=>{
13
+ const $ = c(5);
14
+ const { tickFormatter, interval: t1, minTickGap } = t0;
15
+ const interval = void 0 === t1 ? "preserveStartEnd" : t1;
16
+ const dataCtx = useContext(LineChartDataContext);
17
+ const t2 = dataCtx?.xKey;
18
+ const t3 = tickFormatter;
19
+ let t4;
20
+ if ($[0] !== interval || $[1] !== minTickGap || $[2] !== t2 || $[3] !== t3) {
21
+ t4 = /*#__PURE__*/ jsx(XAxis, {
22
+ dataKey: t2,
23
+ height: LINE_X_LABEL_HEIGHT,
24
+ tickLine: false,
25
+ axisLine: AXIS_LINE_PROPS,
26
+ tick: renderTick,
27
+ tickFormatter: t3,
28
+ interval: interval,
29
+ minTickGap: minTickGap
30
+ });
31
+ $[0] = interval;
32
+ $[1] = minTickGap;
33
+ $[2] = t2;
34
+ $[3] = t3;
35
+ $[4] = t4;
36
+ } else t4 = $[4];
37
+ return t4;
38
+ };
39
+ ColumnChartXAxis.displayName = "ColumnChartXAxis";
40
+ export { ColumnChartXAxis };
@@ -0,0 +1,2 @@
1
+ export { lineChartRootClasses as columnChartRootClasses } from '../LineChart/classes.js';
2
+ export declare const columnChartBodyClasses: string;
@@ -0,0 +1,7 @@
1
+ import { lineChartBodyClasses, lineChartRootClasses } from "../LineChart/classes.js";
2
+ const columnChartBodyClasses = [
3
+ lineChartBodyClasses,
4
+ '[&_.recharts-bar]:animate-[ds-chart-fade-in_400ms_ease-out]',
5
+ 'motion-reduce:[&_.recharts-bar]:animate-none'
6
+ ].join(' ');
7
+ export { columnChartBodyClasses, lineChartRootClasses as columnChartRootClasses };
@@ -0,0 +1,8 @@
1
+ export { LINE_CARD_HEIGHT as COLUMN_CARD_HEIGHT, LINE_DEFAULT_BODY_MARGIN as COLUMN_DEFAULT_BODY_MARGIN, LINE_HEADER_HEIGHT as COLUMN_HEADER_HEIGHT, LINE_INACTIVE_OPACITY as COLUMN_INACTIVE_OPACITY, } from '../LineChart/constants.js';
2
+ export declare const COLUMN_MAX_WIDTH = 32;
3
+ export declare const COLUMN_MIN_WIDTH = 16;
4
+ export declare const COLUMN_GAP = 22;
5
+ /** 1px gap between the parts of a column. */
6
+ export declare const COLUMN_PART_GAP = 1;
7
+ /** Top corners of the whole column (the topmost part), via recharts' `BarStack` clip-path. */
8
+ export declare const COLUMN_RADIUS: [number, number, number, number];
@@ -0,0 +1,12 @@
1
+ const COLUMN_MAX_WIDTH = 32;
2
+ const COLUMN_MIN_WIDTH = 16;
3
+ const COLUMN_GAP = 22;
4
+ const COLUMN_PART_GAP = 1;
5
+ const COLUMN_RADIUS = [
6
+ 4,
7
+ 4,
8
+ 0,
9
+ 0
10
+ ];
11
+ export { LINE_CARD_HEIGHT as COLUMN_CARD_HEIGHT, LINE_DEFAULT_BODY_MARGIN as COLUMN_DEFAULT_BODY_MARGIN, LINE_HEADER_HEIGHT as COLUMN_HEADER_HEIGHT, LINE_INACTIVE_OPACITY as COLUMN_INACTIVE_OPACITY } from "../LineChart/constants.js";
12
+ export { COLUMN_GAP, COLUMN_MAX_WIDTH, COLUMN_MIN_WIDTH, COLUMN_PART_GAP, COLUMN_RADIUS };
@@ -0,0 +1,4 @@
1
+ export { ColumnChart, type ColumnChartProps } from './ColumnChart.js';
2
+ export { ColumnChartBody, type ColumnChartBodyProps } from './ColumnChartBody.js';
3
+ export { ColumnChartStack } from './ColumnChartStack.js';
4
+ export { ColumnChartXAxis, type ColumnChartXAxisProps } from './ColumnChartXAxis.js';
@@ -0,0 +1,4 @@
1
+ export { ColumnChart } from "./ColumnChart.js";
2
+ export { ColumnChartBody } from "./ColumnChartBody.js";
3
+ export { ColumnChartStack } from "./ColumnChartStack.js";
4
+ export { ColumnChartXAxis } from "./ColumnChartXAxis.js";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Column width for a step of `band` px: the band minus the 22px gap, clamped to 16–32px and
3
+ * rounded to whole pixels so column edges stay crisp. Kept strictly under the band: recharts
4
+ * ignores a `barSize` that fills the band and draws 90% of it instead. Under 16px per step the
5
+ * columns shrink to leave 1px or less between them — Figma leaves that case open (see
6
+ * `docs/ColumnChart.md` → Open questions).
7
+ */
8
+ export declare const resolveColumnWidth: (band: number) => number;
@@ -0,0 +1,7 @@
1
+ import { COLUMN_GAP, COLUMN_MAX_WIDTH, COLUMN_MIN_WIDTH } from "../constants.js";
2
+ const resolveColumnWidth = (band)=>{
3
+ if (!(band > 1)) return 0;
4
+ const width = Math.min(COLUMN_MAX_WIDTH, Math.max(COLUMN_MIN_WIDTH, band - COLUMN_GAP));
5
+ return Math.min(Math.ceil(band - 1e-6) - 1, Math.round(width));
6
+ };
7
+ export { resolveColumnWidth };
@@ -17,13 +17,15 @@ const dropEdgeGridLines = ({ keepTop = false, keepBottom = false } = {})=>{
17
17
  let cachedYs = null;
18
18
  let cachedAxis = null;
19
19
  return (props)=>{
20
- const { offset, x1, x2, y1, y2, key, index: _index, yAxis, ...rest } = props;
20
+ const { offset, x1, x2, y1, y2, key, yAxis, stroke, strokeDasharray } = props;
21
21
  const line = asSvgElement(createElement('line', {
22
- ...rest,
23
22
  x1,
24
23
  x2,
25
24
  y1,
26
- y2
25
+ y2,
26
+ stroke,
27
+ strokeDasharray,
28
+ fill: 'none'
27
29
  }));
28
30
  if ('number' != typeof y1 || !yAxis) return line;
29
31
  if (cachedAxis !== yAxis) {
@@ -1,6 +1,7 @@
1
1
  export { AreaChart, AreaChartArea, type AreaChartAreaProps, AreaChartBody, type AreaChartBodyProps, type AreaChartProps, type AreaChartVariant, } from './AreaChart/index.js';
2
2
  export { BarList, BarListBar, type BarListBarProps, BarListItem, type BarListItemProps, BarListLabel, type BarListLabelProps, BarListPercent, type BarListPercentProps, type BarListProps, BarListSkeleton, type BarListSkeletonProps, BarListValue, type BarListValueProps, } from './BarList/index.js';
3
3
  export { Chart, ChartActions, type ChartActionsProps, ChartEmpty, type ChartEmptyProps, ChartHeader, type ChartHeaderProps, type ChartProps, ChartTitle, type ChartTitleProps, } from './Chart/index.js';
4
+ export { ColumnChart, ColumnChartBody, type ColumnChartBodyProps, type ColumnChartProps, ColumnChartStack, ColumnChartXAxis, type ColumnChartXAxisProps, } from './ColumnChart/index.js';
4
5
  export { HorizontalBarStack, type HorizontalBarStackDatum, type HorizontalBarStackProps, HorizontalBarStackSkeleton, type HorizontalBarStackSkeletonProps, } from './HorizontalBarStack/index.js';
5
6
  export { type ChartTimeFormatters, useChartTimeFormatters } from './hooks/index.js';
6
7
  export { LineChart, LineChartBody, type LineChartBodyProps, type LineChartDatum, LineChartEmpty, type LineChartEmptyProps, LineChartGrid, type LineChartGridProps, LineChartHoverPopover, LineChartHoverPopoverDot, type LineChartHoverPopoverDotProps, type LineChartHoverPopoverProps, LineChartHoverPopoverRow, type LineChartHoverPopoverRowProps, LineChartHoverPopoverTimestamp, type LineChartHoverPopoverTimestampProps, LineChartLegend, LineChartLegendItem, type LineChartLegendItemProps, type LineChartLegendOrientation, type LineChartLegendProps, LineChartLine, type LineChartLineProps, type LineChartProps, type LineChartSeries, LineChartTooltip, type LineChartTooltipProps, type LineChartTooltipRenderArgs, LineChartXAxis, type LineChartXAxisProps, LineChartYAxis, type LineChartYAxisProps, LineChartZoomBrush, type LineChartZoomBrushProps, LineChartZoomPopover, LineChartZoomPopoverConfirm, type LineChartZoomPopoverConfirmProps, type LineChartZoomPopoverProps, LineChartZoomPopoverRange, type LineChartZoomPopoverRangeProps, type LineChartZoomRange, } from './LineChart/index.js';
@@ -1,6 +1,7 @@
1
1
  export { AreaChart, AreaChartArea, AreaChartBody } from "./AreaChart/index.js";
2
2
  export { BarList, BarListBar, BarListItem, BarListLabel, BarListPercent, BarListSkeleton, BarListValue } from "./BarList/index.js";
3
3
  export { Chart, ChartActions, ChartEmpty, ChartHeader, ChartTitle } from "./Chart/index.js";
4
+ export { ColumnChart, ColumnChartBody, ColumnChartStack, ColumnChartXAxis } from "./ColumnChart/index.js";
4
5
  export { HorizontalBarStack, HorizontalBarStackSkeleton } from "./HorizontalBarStack/index.js";
5
6
  export { useChartTimeFormatters } from "./hooks/index.js";
6
7
  export { LineChart, LineChartBody, LineChartEmpty, LineChartGrid, LineChartHoverPopover, LineChartHoverPopoverDot, LineChartHoverPopoverRow, LineChartHoverPopoverTimestamp, LineChartLegend, LineChartLegendItem, LineChartLine, LineChartTooltip, LineChartXAxis, LineChartYAxis, LineChartZoomBrush, LineChartZoomPopover, LineChartZoomPopoverConfirm, LineChartZoomPopoverRange } from "./LineChart/index.js";
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "4.0.0",
3
- "generatedAt": "2026-10-22T13:25:11.859Z",
2
+ "version": "4.1.0",
3
+ "generatedAt": "2026-10-22T14:48:29.689Z",
4
4
  "components": [
5
5
  {
6
6
  "name": "Accordion",
@@ -98252,6 +98252,610 @@
98252
98252
  }
98253
98253
  ]
98254
98254
  },
98255
+ {
98256
+ "name": "ColumnChartBody",
98257
+ "props": [
98258
+ {
98259
+ "name": "height",
98260
+ "type": "number | undefined",
98261
+ "required": false,
98262
+ "description": "Plot height passed to recharts' `<ResponsiveContainer>`. Defaults to the Figma 164px.",
98263
+ "defaultValue": "DEFAULT_BODY_HEIGHT"
98264
+ },
98265
+ {
98266
+ "name": "defaultChecked",
98267
+ "type": "boolean | undefined",
98268
+ "required": false
98269
+ },
98270
+ {
98271
+ "name": "defaultValue",
98272
+ "type": "string | number | readonly string[] | undefined",
98273
+ "required": false
98274
+ },
98275
+ {
98276
+ "name": "suppressContentEditableWarning",
98277
+ "type": "boolean | undefined",
98278
+ "required": false
98279
+ },
98280
+ {
98281
+ "name": "suppressHydrationWarning",
98282
+ "type": "boolean | undefined",
98283
+ "required": false
98284
+ },
98285
+ {
98286
+ "name": "accessKey",
98287
+ "type": "string | undefined",
98288
+ "required": false
98289
+ },
98290
+ {
98291
+ "name": "autoCapitalize",
98292
+ "type": "\"off\" | \"none\" | \"on\" | \"sentences\" | \"words\" | \"characters\" | (string & {}) | undefined",
98293
+ "required": false
98294
+ },
98295
+ {
98296
+ "name": "autoFocus",
98297
+ "type": "boolean | undefined",
98298
+ "required": false
98299
+ },
98300
+ {
98301
+ "name": "contentEditable",
98302
+ "type": "Booleanish | \"inherit\" | \"plaintext-only\" | undefined",
98303
+ "required": false
98304
+ },
98305
+ {
98306
+ "name": "contextMenu",
98307
+ "type": "string | undefined",
98308
+ "required": false
98309
+ },
98310
+ {
98311
+ "name": "dir",
98312
+ "type": "string | undefined",
98313
+ "required": false
98314
+ },
98315
+ {
98316
+ "name": "draggable",
98317
+ "type": "Booleanish | undefined",
98318
+ "required": false
98319
+ },
98320
+ {
98321
+ "name": "enterKeyHint",
98322
+ "type": "\"enter\" | \"done\" | \"go\" | \"next\" | \"previous\" | \"search\" | \"send\" | undefined",
98323
+ "required": false
98324
+ },
98325
+ {
98326
+ "name": "hidden",
98327
+ "type": "boolean | undefined",
98328
+ "required": false
98329
+ },
98330
+ {
98331
+ "name": "id",
98332
+ "type": "string | undefined",
98333
+ "required": false
98334
+ },
98335
+ {
98336
+ "name": "lang",
98337
+ "type": "string | undefined",
98338
+ "required": false
98339
+ },
98340
+ {
98341
+ "name": "nonce",
98342
+ "type": "string | undefined",
98343
+ "required": false
98344
+ },
98345
+ {
98346
+ "name": "slot",
98347
+ "type": "string | undefined",
98348
+ "required": false
98349
+ },
98350
+ {
98351
+ "name": "spellCheck",
98352
+ "type": "Booleanish | undefined",
98353
+ "required": false
98354
+ },
98355
+ {
98356
+ "name": "tabIndex",
98357
+ "type": "number | undefined",
98358
+ "required": false
98359
+ },
98360
+ {
98361
+ "name": "title",
98362
+ "type": "string | undefined",
98363
+ "required": false
98364
+ },
98365
+ {
98366
+ "name": "translate",
98367
+ "type": "\"yes\" | \"no\" | undefined",
98368
+ "required": false
98369
+ },
98370
+ {
98371
+ "name": "radioGroup",
98372
+ "type": "string | undefined",
98373
+ "required": false
98374
+ },
98375
+ {
98376
+ "name": "role",
98377
+ "type": "AriaRole | undefined",
98378
+ "required": false
98379
+ },
98380
+ {
98381
+ "name": "about",
98382
+ "type": "string | undefined",
98383
+ "required": false
98384
+ },
98385
+ {
98386
+ "name": "content",
98387
+ "type": "string | undefined",
98388
+ "required": false
98389
+ },
98390
+ {
98391
+ "name": "datatype",
98392
+ "type": "string | undefined",
98393
+ "required": false
98394
+ },
98395
+ {
98396
+ "name": "inlist",
98397
+ "type": "any",
98398
+ "required": false
98399
+ },
98400
+ {
98401
+ "name": "prefix",
98402
+ "type": "string | undefined",
98403
+ "required": false
98404
+ },
98405
+ {
98406
+ "name": "property",
98407
+ "type": "string | undefined",
98408
+ "required": false
98409
+ },
98410
+ {
98411
+ "name": "rel",
98412
+ "type": "string | undefined",
98413
+ "required": false
98414
+ },
98415
+ {
98416
+ "name": "resource",
98417
+ "type": "string | undefined",
98418
+ "required": false
98419
+ },
98420
+ {
98421
+ "name": "rev",
98422
+ "type": "string | undefined",
98423
+ "required": false
98424
+ },
98425
+ {
98426
+ "name": "typeof",
98427
+ "type": "string | undefined",
98428
+ "required": false
98429
+ },
98430
+ {
98431
+ "name": "vocab",
98432
+ "type": "string | undefined",
98433
+ "required": false
98434
+ },
98435
+ {
98436
+ "name": "autoCorrect",
98437
+ "type": "string | undefined",
98438
+ "required": false
98439
+ },
98440
+ {
98441
+ "name": "autoSave",
98442
+ "type": "string | undefined",
98443
+ "required": false
98444
+ },
98445
+ {
98446
+ "name": "color",
98447
+ "type": "string | undefined",
98448
+ "required": false
98449
+ },
98450
+ {
98451
+ "name": "itemProp",
98452
+ "type": "string | undefined",
98453
+ "required": false
98454
+ },
98455
+ {
98456
+ "name": "itemScope",
98457
+ "type": "boolean | undefined",
98458
+ "required": false
98459
+ },
98460
+ {
98461
+ "name": "itemType",
98462
+ "type": "string | undefined",
98463
+ "required": false
98464
+ },
98465
+ {
98466
+ "name": "itemID",
98467
+ "type": "string | undefined",
98468
+ "required": false
98469
+ },
98470
+ {
98471
+ "name": "itemRef",
98472
+ "type": "string | undefined",
98473
+ "required": false
98474
+ },
98475
+ {
98476
+ "name": "results",
98477
+ "type": "number | undefined",
98478
+ "required": false
98479
+ },
98480
+ {
98481
+ "name": "security",
98482
+ "type": "string | undefined",
98483
+ "required": false
98484
+ },
98485
+ {
98486
+ "name": "unselectable",
98487
+ "type": "\"off\" | \"on\" | undefined",
98488
+ "required": false
98489
+ },
98490
+ {
98491
+ "name": "popover",
98492
+ "type": "\"\" | \"auto\" | \"manual\" | \"hint\" | undefined",
98493
+ "required": false
98494
+ },
98495
+ {
98496
+ "name": "popoverTargetAction",
98497
+ "type": "\"toggle\" | \"show\" | \"hide\" | undefined",
98498
+ "required": false
98499
+ },
98500
+ {
98501
+ "name": "popoverTarget",
98502
+ "type": "string | undefined",
98503
+ "required": false
98504
+ },
98505
+ {
98506
+ "name": "inert",
98507
+ "type": "boolean | undefined",
98508
+ "required": false,
98509
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert}"
98510
+ },
98511
+ {
98512
+ "name": "inputMode",
98513
+ "type": "\"none\" | \"search\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined",
98514
+ "required": false,
98515
+ "description": "Hints at the type of data that might be entered by the user while editing the element or its contents"
98516
+ },
98517
+ {
98518
+ "name": "is",
98519
+ "type": "string | undefined",
98520
+ "required": false,
98521
+ "description": "Specify that a standard HTML element should behave like a defined custom built-in element"
98522
+ },
98523
+ {
98524
+ "name": "exportparts",
98525
+ "type": "string | undefined",
98526
+ "required": false,
98527
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/exportparts}"
98528
+ },
98529
+ {
98530
+ "name": "part",
98531
+ "type": "string | undefined",
98532
+ "required": false,
98533
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/part}"
98534
+ }
98535
+ ]
98536
+ },
98537
+ {
98538
+ "name": "ColumnChart",
98539
+ "props": [
98540
+ {
98541
+ "name": "data",
98542
+ "type": "T[]",
98543
+ "required": true,
98544
+ "description": "One entry per column (step), sorted ascending by `xKey`."
98545
+ },
98546
+ {
98547
+ "name": "series",
98548
+ "type": "LineChartSeries<Extract<keyof T, string>>[]",
98549
+ "required": true,
98550
+ "description": "The categories each column is split into, in legend order — the first one stacks on top.\nThe same schema drives the legend, the parts and the hover popover rows."
98551
+ },
98552
+ {
98553
+ "name": "xKey",
98554
+ "type": "Extract<keyof T, string>",
98555
+ "required": true,
98556
+ "description": "Key on each datum used as the X-axis value (the step: a day, an hour, …)."
98557
+ },
98558
+ {
98559
+ "name": "defaultChecked",
98560
+ "type": "boolean | undefined",
98561
+ "required": false
98562
+ },
98563
+ {
98564
+ "name": "defaultValue",
98565
+ "type": "string | number | readonly string[] | undefined",
98566
+ "required": false
98567
+ },
98568
+ {
98569
+ "name": "suppressContentEditableWarning",
98570
+ "type": "boolean | undefined",
98571
+ "required": false
98572
+ },
98573
+ {
98574
+ "name": "suppressHydrationWarning",
98575
+ "type": "boolean | undefined",
98576
+ "required": false
98577
+ },
98578
+ {
98579
+ "name": "accessKey",
98580
+ "type": "string | undefined",
98581
+ "required": false
98582
+ },
98583
+ {
98584
+ "name": "autoCapitalize",
98585
+ "type": "\"off\" | \"none\" | \"on\" | \"sentences\" | \"words\" | \"characters\" | (string & {}) | undefined",
98586
+ "required": false
98587
+ },
98588
+ {
98589
+ "name": "autoFocus",
98590
+ "type": "boolean | undefined",
98591
+ "required": false
98592
+ },
98593
+ {
98594
+ "name": "contentEditable",
98595
+ "type": "Booleanish | \"inherit\" | \"plaintext-only\" | undefined",
98596
+ "required": false
98597
+ },
98598
+ {
98599
+ "name": "contextMenu",
98600
+ "type": "string | undefined",
98601
+ "required": false
98602
+ },
98603
+ {
98604
+ "name": "dir",
98605
+ "type": "string | undefined",
98606
+ "required": false
98607
+ },
98608
+ {
98609
+ "name": "draggable",
98610
+ "type": "Booleanish | undefined",
98611
+ "required": false
98612
+ },
98613
+ {
98614
+ "name": "enterKeyHint",
98615
+ "type": "\"enter\" | \"done\" | \"go\" | \"next\" | \"previous\" | \"search\" | \"send\" | undefined",
98616
+ "required": false
98617
+ },
98618
+ {
98619
+ "name": "hidden",
98620
+ "type": "boolean | undefined",
98621
+ "required": false
98622
+ },
98623
+ {
98624
+ "name": "id",
98625
+ "type": "string | undefined",
98626
+ "required": false
98627
+ },
98628
+ {
98629
+ "name": "lang",
98630
+ "type": "string | undefined",
98631
+ "required": false
98632
+ },
98633
+ {
98634
+ "name": "nonce",
98635
+ "type": "string | undefined",
98636
+ "required": false
98637
+ },
98638
+ {
98639
+ "name": "slot",
98640
+ "type": "string | undefined",
98641
+ "required": false
98642
+ },
98643
+ {
98644
+ "name": "spellCheck",
98645
+ "type": "Booleanish | undefined",
98646
+ "required": false
98647
+ },
98648
+ {
98649
+ "name": "tabIndex",
98650
+ "type": "number | undefined",
98651
+ "required": false
98652
+ },
98653
+ {
98654
+ "name": "title",
98655
+ "type": "string | undefined",
98656
+ "required": false
98657
+ },
98658
+ {
98659
+ "name": "translate",
98660
+ "type": "\"yes\" | \"no\" | undefined",
98661
+ "required": false
98662
+ },
98663
+ {
98664
+ "name": "radioGroup",
98665
+ "type": "string | undefined",
98666
+ "required": false
98667
+ },
98668
+ {
98669
+ "name": "role",
98670
+ "type": "AriaRole | undefined",
98671
+ "required": false
98672
+ },
98673
+ {
98674
+ "name": "about",
98675
+ "type": "string | undefined",
98676
+ "required": false
98677
+ },
98678
+ {
98679
+ "name": "content",
98680
+ "type": "string | undefined",
98681
+ "required": false
98682
+ },
98683
+ {
98684
+ "name": "datatype",
98685
+ "type": "string | undefined",
98686
+ "required": false
98687
+ },
98688
+ {
98689
+ "name": "inlist",
98690
+ "type": "any",
98691
+ "required": false
98692
+ },
98693
+ {
98694
+ "name": "prefix",
98695
+ "type": "string | undefined",
98696
+ "required": false
98697
+ },
98698
+ {
98699
+ "name": "property",
98700
+ "type": "string | undefined",
98701
+ "required": false
98702
+ },
98703
+ {
98704
+ "name": "rel",
98705
+ "type": "string | undefined",
98706
+ "required": false
98707
+ },
98708
+ {
98709
+ "name": "resource",
98710
+ "type": "string | undefined",
98711
+ "required": false
98712
+ },
98713
+ {
98714
+ "name": "rev",
98715
+ "type": "string | undefined",
98716
+ "required": false
98717
+ },
98718
+ {
98719
+ "name": "typeof",
98720
+ "type": "string | undefined",
98721
+ "required": false
98722
+ },
98723
+ {
98724
+ "name": "vocab",
98725
+ "type": "string | undefined",
98726
+ "required": false
98727
+ },
98728
+ {
98729
+ "name": "autoCorrect",
98730
+ "type": "string | undefined",
98731
+ "required": false
98732
+ },
98733
+ {
98734
+ "name": "autoSave",
98735
+ "type": "string | undefined",
98736
+ "required": false
98737
+ },
98738
+ {
98739
+ "name": "color",
98740
+ "type": "string | undefined",
98741
+ "required": false
98742
+ },
98743
+ {
98744
+ "name": "itemProp",
98745
+ "type": "string | undefined",
98746
+ "required": false
98747
+ },
98748
+ {
98749
+ "name": "itemScope",
98750
+ "type": "boolean | undefined",
98751
+ "required": false
98752
+ },
98753
+ {
98754
+ "name": "itemType",
98755
+ "type": "string | undefined",
98756
+ "required": false
98757
+ },
98758
+ {
98759
+ "name": "itemID",
98760
+ "type": "string | undefined",
98761
+ "required": false
98762
+ },
98763
+ {
98764
+ "name": "itemRef",
98765
+ "type": "string | undefined",
98766
+ "required": false
98767
+ },
98768
+ {
98769
+ "name": "results",
98770
+ "type": "number | undefined",
98771
+ "required": false
98772
+ },
98773
+ {
98774
+ "name": "security",
98775
+ "type": "string | undefined",
98776
+ "required": false
98777
+ },
98778
+ {
98779
+ "name": "unselectable",
98780
+ "type": "\"off\" | \"on\" | undefined",
98781
+ "required": false
98782
+ },
98783
+ {
98784
+ "name": "popover",
98785
+ "type": "\"\" | \"auto\" | \"manual\" | \"hint\" | undefined",
98786
+ "required": false
98787
+ },
98788
+ {
98789
+ "name": "popoverTargetAction",
98790
+ "type": "\"toggle\" | \"show\" | \"hide\" | undefined",
98791
+ "required": false
98792
+ },
98793
+ {
98794
+ "name": "popoverTarget",
98795
+ "type": "string | undefined",
98796
+ "required": false
98797
+ },
98798
+ {
98799
+ "name": "inert",
98800
+ "type": "boolean | undefined",
98801
+ "required": false,
98802
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert}"
98803
+ },
98804
+ {
98805
+ "name": "inputMode",
98806
+ "type": "\"none\" | \"search\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined",
98807
+ "required": false,
98808
+ "description": "Hints at the type of data that might be entered by the user while editing the element or its contents"
98809
+ },
98810
+ {
98811
+ "name": "is",
98812
+ "type": "string | undefined",
98813
+ "required": false,
98814
+ "description": "Specify that a standard HTML element should behave like a defined custom built-in element"
98815
+ },
98816
+ {
98817
+ "name": "exportparts",
98818
+ "type": "string | undefined",
98819
+ "required": false,
98820
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/exportparts}"
98821
+ },
98822
+ {
98823
+ "name": "part",
98824
+ "type": "string | undefined",
98825
+ "required": false,
98826
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/part}"
98827
+ },
98828
+ {
98829
+ "name": "data-testid",
98830
+ "type": "string | undefined",
98831
+ "required": false
98832
+ }
98833
+ ]
98834
+ },
98835
+ {
98836
+ "name": "ColumnChartXAxis",
98837
+ "props": [
98838
+ {
98839
+ "name": "tickFormatter",
98840
+ "type": "((value: unknown, index: number) => string) | undefined",
98841
+ "required": false,
98842
+ "description": "Format the rendered tick label. Receives the raw `xKey` value of the column."
98843
+ },
98844
+ {
98845
+ "name": "interval",
98846
+ "type": "number | \"preserveStart\" | \"preserveEnd\" | \"preserveStartEnd\" | undefined",
98847
+ "required": false,
98848
+ "description": "Recharts tick interval. Defaults to `'preserveStartEnd'`: the first and last columns keep\ntheir labels and middle ones drop out when the labels would collide. `0` labels every column.",
98849
+ "defaultValue": "preserveStartEnd"
98850
+ },
98851
+ {
98852
+ "name": "minTickGap",
98853
+ "type": "number | undefined",
98854
+ "required": false,
98855
+ "description": "Minimum gap (in pixels) between rendered tick labels."
98856
+ }
98857
+ ]
98858
+ },
98255
98859
  {
98256
98860
  "name": "HorizontalBarStack",
98257
98861
  "props": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallarm-org/design-system",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "description": "Core design system library with React components and Storybook documentation",
5
5
  "publishConfig": {
6
6
  "access": "public",