@schemavaults/ui 0.47.0 → 0.49.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,105 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ import type { HTMLAttributes, KeyboardEvent, MouseEvent, ReactElement, ReactNode, Ref } from "react";
3
+ export declare const barChartSizeIds: ["sm", "md", "lg", "xl"];
4
+ export type BarChartSizeId = (typeof barChartSizeIds)[number];
5
+ export declare const barChartOrientationIds: ["vertical", "horizontal"];
6
+ export type BarChartOrientationId = (typeof barChartOrientationIds)[number];
7
+ export declare const barChartBarColorIds: ["default", "primary", "positive", "warning", "destructive", "muted"];
8
+ export type BarChartBarColorId = (typeof barChartBarColorIds)[number];
9
+ export declare const barChartVariants: (props?: ({
10
+ size?: "sm" | "lg" | "xl" | "md" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ export interface BarChartBar {
13
+ /** Stable identifier for the bar. Used as React key and click payload. */
14
+ id: string;
15
+ /**
16
+ * Bar magnitude. Bar length is `value / max`. Negative and non-finite
17
+ * values are treated as `0`.
18
+ */
19
+ value: number;
20
+ /** Human-readable category label rendered along the axis. */
21
+ label?: string;
22
+ /** Preset color id from the chart palette. Ignored if `fill` is provided. */
23
+ color?: BarChartBarColorId;
24
+ /**
25
+ * Override the fill with a raw CSS color (e.g. `"#ff0080"` or
26
+ * `"hsl(var(--chart-1))"`). Takes precedence over `color`.
27
+ */
28
+ fill?: string;
29
+ /** Extra classes applied to this bar's `<rect>`. */
30
+ className?: string;
31
+ /** Fired when this bar is clicked or activated via keyboard. */
32
+ onClick?: (bar: BarChartBar, event: MouseEvent<SVGRectElement> | KeyboardEvent<SVGRectElement>) => void;
33
+ }
34
+ export interface BarChartValueLabelContext {
35
+ bar: BarChartBar;
36
+ value: number;
37
+ /** Share of the scale max, in the range 0–1. */
38
+ fraction: number;
39
+ /** Share of the scale max, in the range 0–100. */
40
+ percentage: number;
41
+ index: number;
42
+ }
43
+ export interface BarChartProps extends Omit<HTMLAttributes<HTMLDivElement>, "onClick">, VariantProps<typeof barChartVariants> {
44
+ /** Bars to render, in order. */
45
+ bars: ReadonlyArray<BarChartBar>;
46
+ /** Accessible label describing what the chart represents. */
47
+ label: string;
48
+ /** Bar direction. Defaults to `"vertical"` (columns growing upward). */
49
+ orientation?: BarChartOrientationId;
50
+ /**
51
+ * Upper bound of the value scale. Defaults to the largest bar value (or `1`
52
+ * when every bar is `0`). Useful for pinning multiple charts to a shared
53
+ * scale.
54
+ */
55
+ max?: number;
56
+ /** Override the rendered canvas width in pixels (defaults are size-aware). */
57
+ width?: number;
58
+ /** Override the rendered canvas height in pixels (defaults are size-aware). */
59
+ height?: number;
60
+ /**
61
+ * Gap between bars as a fraction of each bar's slot (0–0.9). Defaults to
62
+ * `0.3`.
63
+ */
64
+ barGap?: number;
65
+ /** Corner radius applied to the free end of every bar. Defaults to `4`. */
66
+ cornerRadius?: number;
67
+ /** Render the baseline axis line. Defaults to `true`. */
68
+ showAxis?: boolean;
69
+ /**
70
+ * Number of evenly-spaced gridlines drawn across the value axis. `0`
71
+ * disables gridlines. Defaults to `0`.
72
+ */
73
+ gridLineCount?: number;
74
+ /** Render each bar's category `label` along the axis. Defaults to `true`. */
75
+ showCategoryLabels?: boolean;
76
+ /** Render a value label at the free end of each bar. Defaults to `false`. */
77
+ showValueLabels?: boolean;
78
+ /**
79
+ * Customize the value-label text. Return `null` to skip a bar. Defaults to
80
+ * the raw value (`String(value)`).
81
+ */
82
+ valueLabelFormatter?: (context: BarChartValueLabelContext) => string | null;
83
+ /**
84
+ * Fallback handler invoked for any bar that doesn't have its own `onClick`.
85
+ * Receives the clicked bar.
86
+ */
87
+ onBarClick?: (bar: BarChartBar, event: MouseEvent<SVGRectElement> | KeyboardEvent<SVGRectElement>) => void;
88
+ /** Optional content overlaid on top of the plot area. */
89
+ children?: ReactNode;
90
+ /** Extra classes for the overlay content wrapper. */
91
+ overlayClassName?: string;
92
+ /** Extra classes applied to every value-label `<text>` element. */
93
+ valueLabelClassName?: string;
94
+ /** Extra classes applied to every category-label `<text>` element. */
95
+ categoryLabelClassName?: string;
96
+ /** Extra classes applied to the axis / gridline `<line>` elements. */
97
+ axisClassName?: string;
98
+ /** Optional ref forwarded to the wrapper element. */
99
+ ref?: Ref<HTMLDivElement>;
100
+ }
101
+ declare function BarChart({ bars, label, orientation, max, size, width, height, barGap, cornerRadius, showAxis, gridLineCount, showCategoryLabels, showValueLabels, valueLabelFormatter, onBarClick, children, className, overlayClassName, valueLabelClassName, categoryLabelClassName, axisClassName, ref, ...props }: BarChartProps): ReactElement;
102
+ declare namespace BarChart {
103
+ var displayName: string;
104
+ }
105
+ export { BarChart };
@@ -0,0 +1,202 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ import { useId } from "react";
5
+ import { cn } from "../../../lib/utils";
6
+ export const barChartSizeIds = [
7
+ "sm",
8
+ "md",
9
+ "lg",
10
+ "xl",
11
+ ];
12
+ export const barChartOrientationIds = [
13
+ "vertical",
14
+ "horizontal",
15
+ ];
16
+ export const barChartBarColorIds = [
17
+ "default",
18
+ "primary",
19
+ "positive",
20
+ "warning",
21
+ "destructive",
22
+ "muted",
23
+ ];
24
+ /** Default canvas dimensions per size. Either axis can be overridden via the
25
+ * `width` / `height` props. */
26
+ const SIZE_TO_CANVAS = {
27
+ sm: { width: 240, height: 140 },
28
+ md: { width: 360, height: 200 },
29
+ lg: { width: 480, height: 260 },
30
+ xl: { width: 640, height: 340 },
31
+ };
32
+ const BAR_FILL_CLASSES = {
33
+ default: "fill-schemavaults-brand-blue",
34
+ primary: "fill-primary",
35
+ positive: "fill-emerald-500 dark:fill-emerald-400",
36
+ warning: "fill-warning",
37
+ destructive: "fill-destructive",
38
+ muted: "fill-muted-foreground",
39
+ };
40
+ /**
41
+ * Fallback color rotation when a bar doesn't specify its own color. Index is
42
+ * the bar position in the input array, modulo the palette length.
43
+ */
44
+ const DEFAULT_COLOR_ROTATION = [
45
+ "default",
46
+ "positive",
47
+ "warning",
48
+ "destructive",
49
+ "primary",
50
+ "muted",
51
+ ];
52
+ export const barChartVariants = cva("relative inline-flex shrink-0 items-center justify-center", {
53
+ variants: {
54
+ size: {
55
+ sm: "text-[10px]",
56
+ md: "text-[11px]",
57
+ lg: "text-xs",
58
+ xl: "text-sm",
59
+ },
60
+ },
61
+ defaultVariants: {
62
+ size: "md",
63
+ },
64
+ });
65
+ function sanitizeValue(value) {
66
+ if (!Number.isFinite(value) || value < 0)
67
+ return 0;
68
+ return value;
69
+ }
70
+ function BarChart({ bars, label, orientation = "vertical", max, size, width, height, barGap = 0.3, cornerRadius = 4, showAxis = true, gridLineCount = 0, showCategoryLabels = true, showValueLabels = false, valueLabelFormatter, onBarClick, children, className, overlayClassName, valueLabelClassName, categoryLabelClassName, axisClassName, ref, ...props }) {
71
+ const resolvedSize = size ?? "md";
72
+ const canvas = SIZE_TO_CANVAS[resolvedSize];
73
+ const W = width ?? canvas.width;
74
+ const H = height ?? canvas.height;
75
+ const titleId = useId();
76
+ const isHorizontal = orientation === "horizontal";
77
+ const gap = Math.max(0, Math.min(0.9, barGap));
78
+ // Reserve a gutter for category labels (along the axis) and a gutter for
79
+ // value labels (at the free end of the bars).
80
+ const categoryGutter = showCategoryLabels ? 24 : 6;
81
+ const valueGutter = showValueLabels ? 28 : 6;
82
+ const padTop = isHorizontal ? 6 : valueGutter;
83
+ const padBottom = isHorizontal ? categoryGutter : categoryGutter;
84
+ const padLeft = isHorizontal ? categoryGutter + 8 : 6;
85
+ const padRight = isHorizontal ? valueGutter : 6;
86
+ const plotX0 = padLeft;
87
+ const plotY0 = padTop;
88
+ const plotW = Math.max(0, W - padLeft - padRight);
89
+ const plotH = Math.max(0, H - padTop - padBottom);
90
+ const sanitized = bars.map((b) => sanitizeValue(b.value));
91
+ const computedMax = max ?? Math.max(0, ...sanitized);
92
+ const scaleMax = computedMax > 0 ? computedMax : 1;
93
+ const count = bars.length;
94
+ const resolved = (() => {
95
+ if (count === 0)
96
+ return [];
97
+ const axisSpan = isHorizontal ? plotH : plotW;
98
+ const slot = axisSpan / count;
99
+ const thickness = slot * (1 - gap);
100
+ const inset = (slot - thickness) / 2;
101
+ return bars.map((bar, index) => {
102
+ const value = sanitized[index];
103
+ const fraction = value / scaleMax;
104
+ const presetColor = bar.color ??
105
+ DEFAULT_COLOR_ROTATION[index % DEFAULT_COLOR_ROTATION.length];
106
+ const fillClass = bar.fill
107
+ ? undefined
108
+ : BAR_FILL_CLASSES[presetColor];
109
+ if (isHorizontal) {
110
+ const barLength = fraction * plotW;
111
+ const y = plotY0 + index * slot + inset;
112
+ const x = plotX0;
113
+ return {
114
+ bar,
115
+ value,
116
+ x,
117
+ y,
118
+ barWidth: barLength,
119
+ barHeight: thickness,
120
+ valueX: x + barLength + 6,
121
+ valueY: y + thickness / 2,
122
+ categoryX: plotX0 - 8,
123
+ categoryY: y + thickness / 2,
124
+ fillClass,
125
+ fill: bar.fill,
126
+ };
127
+ }
128
+ const barLength = fraction * plotH;
129
+ const x = plotX0 + index * slot + inset;
130
+ const y = plotY0 + plotH - barLength;
131
+ return {
132
+ bar,
133
+ value,
134
+ x,
135
+ y,
136
+ barWidth: thickness,
137
+ barHeight: barLength,
138
+ valueX: x + thickness / 2,
139
+ valueY: y - 6,
140
+ categoryX: x + thickness / 2,
141
+ categoryY: plotY0 + plotH + 14,
142
+ fillClass,
143
+ fill: bar.fill,
144
+ };
145
+ });
146
+ })();
147
+ const gridLines = (() => {
148
+ if (gridLineCount <= 0)
149
+ return [];
150
+ const lines = [];
151
+ for (let i = 1; i <= gridLineCount; i += 1) {
152
+ lines.push(i / (gridLineCount + 1));
153
+ }
154
+ return lines;
155
+ })();
156
+ return (_jsxs("div", { ref: ref, role: "img", "aria-labelledby": titleId, "data-slot": "bar-chart", "data-orientation": orientation, className: cn(barChartVariants({ size }), className), style: { width: W, height: H }, ...props, children: [_jsxs("svg", { width: W, height: H, viewBox: `0 0 ${W} ${H}`, "aria-hidden": children ? "true" : undefined, className: "h-full w-full overflow-visible", children: [_jsx("title", { id: titleId, children: label }), gridLines.length > 0 ? (_jsx("g", { "aria-hidden": "true", "data-slot": "bar-chart-gridlines", className: "pointer-events-none", children: gridLines.map((t) => {
157
+ if (isHorizontal) {
158
+ const x = plotX0 + t * plotW;
159
+ return (_jsx("line", { x1: x, y1: plotY0, x2: x, y2: plotY0 + plotH, strokeWidth: 1, className: cn("stroke-border/60", axisClassName) }, `grid-${t}`));
160
+ }
161
+ const y = plotY0 + plotH - t * plotH;
162
+ return (_jsx("line", { x1: plotX0, y1: y, x2: plotX0 + plotW, y2: y, strokeWidth: 1, className: cn("stroke-border/60", axisClassName) }, `grid-${t}`));
163
+ }) })) : null, showAxis ? (_jsx("line", { "data-slot": "bar-chart-axis", x1: plotX0, y1: isHorizontal ? plotY0 : plotY0 + plotH, x2: isHorizontal ? plotX0 : plotX0 + plotW, y2: plotY0 + plotH, strokeWidth: 1, className: cn("stroke-border", axisClassName) })) : null, resolved.length === 0 ? (_jsx("text", { x: W / 2, y: H / 2, textAnchor: "middle", dominantBaseline: "central", className: "fill-muted-foreground", children: "No data" })) : (resolved.map((r) => {
164
+ const handler = r.bar.onClick ?? onBarClick;
165
+ const isInteractive = typeof handler === "function";
166
+ return (_jsx("rect", { x: r.x, y: r.y, width: Math.max(0, r.barWidth), height: Math.max(0, r.barHeight), rx: cornerRadius, ry: cornerRadius, fill: r.fill, "data-bar-id": r.bar.id, role: isInteractive ? "button" : undefined, tabIndex: isInteractive ? 0 : undefined, "aria-label": r.bar.label
167
+ ? `${r.bar.label}: ${r.value}`
168
+ : `${r.bar.id}: ${r.value}`, onClick: isInteractive
169
+ ? (event) => {
170
+ handler(r.bar, event);
171
+ }
172
+ : undefined, onKeyDown: isInteractive
173
+ ? (event) => {
174
+ if (event.key === "Enter" || event.key === " ") {
175
+ event.preventDefault();
176
+ handler(r.bar, event);
177
+ }
178
+ }
179
+ : undefined, className: cn("transition-opacity", r.fillClass, isInteractive &&
180
+ "cursor-pointer hover:opacity-80 focus:outline-none focus-visible:opacity-80", r.bar.className) }, r.bar.id));
181
+ })), showCategoryLabels && resolved.length > 0 ? (_jsx("g", { "aria-hidden": "true", "data-slot": "bar-chart-category-labels", className: "pointer-events-none select-none", children: resolved.map((r) => {
182
+ const text = r.bar.label ?? r.bar.id;
183
+ return (_jsx("text", { x: r.categoryX, y: r.categoryY, textAnchor: isHorizontal ? "end" : "middle", dominantBaseline: isHorizontal ? "central" : "auto", className: cn("fill-muted-foreground", categoryLabelClassName), children: text }, `${r.bar.id}-cat`));
184
+ }) })) : null, showValueLabels && resolved.length > 0 ? (_jsx("g", { "aria-hidden": "true", "data-slot": "bar-chart-value-labels", className: "pointer-events-none select-none", children: resolved.map((r, index) => {
185
+ const fraction = r.value / scaleMax;
186
+ const text = valueLabelFormatter
187
+ ? valueLabelFormatter({
188
+ bar: r.bar,
189
+ value: r.value,
190
+ fraction,
191
+ percentage: fraction * 100,
192
+ index,
193
+ })
194
+ : String(r.value);
195
+ if (text === null || text === "")
196
+ return null;
197
+ return (_jsx("text", { x: r.valueX, y: r.valueY, textAnchor: isHorizontal ? "start" : "middle", dominantBaseline: isHorizontal ? "central" : "auto", className: cn("fill-foreground font-medium", valueLabelClassName), children: text }, `${r.bar.id}-val`));
198
+ }) })) : null] }), children ? (_jsx("div", { className: cn("pointer-events-none absolute inset-0 flex items-center justify-center text-center", overlayClassName), children: children })) : null] }));
199
+ }
200
+ BarChart.displayName = "BarChart";
201
+ export { BarChart };
202
+ //# sourceMappingURL=bar-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bar-chart.js","sourceRoot":"","sources":["../../../../src/components/ui/bar-chart/bar-chart.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AASlE,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACuB,CAAC;AAG9B,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU;IACV,YAAY;CACe,CAAC;AAG9B,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,aAAa;IACb,OAAO;CACoB,CAAC;AAG9B;+BAC+B;AAC/B,MAAM,cAAc,GAGhB;IACF,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAC/B,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAC/B,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAC/B,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;CAChC,CAAC;AAEF,MAAM,gBAAgB,GAAuC;IAC3D,OAAO,EAAE,8BAA8B;IACvC,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,wCAAwC;IAClD,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,kBAAkB;IAC/B,KAAK,EAAE,uBAAuB;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,sBAAsB,GAAsC;IAChE,SAAS;IACT,UAAU;IACV,SAAS;IACT,aAAa;IACb,SAAS;IACT,OAAO;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CACjC,2DAA2D,EAC3D;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,aAAa;YACjB,EAAE,EAAE,aAAa;YACjB,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SAC2B;KAC3C;IACD,eAAe,EAAE;QACf,IAAI,EAAE,IAAI;KACX;CACF,CACF,CAAC;AA0HF,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,IAAI,EACJ,KAAK,EACL,WAAW,GAAG,UAAU,EACxB,GAAG,EACH,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,GAAG,GAAG,EACZ,YAAY,GAAG,CAAC,EAChB,QAAQ,GAAG,IAAI,EACf,aAAa,GAAG,CAAC,EACjB,kBAAkB,GAAG,IAAI,EACzB,eAAe,GAAG,KAAK,EACvB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,GAAG,EACH,GAAG,KAAK,EACM;IACd,MAAM,YAAY,GAAmB,IAAI,IAAI,IAAI,CAAC;IAClD,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAW,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IACxC,MAAM,CAAC,GAAW,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IAE1C,MAAM,OAAO,GAAW,KAAK,EAAE,CAAC;IAEhC,MAAM,YAAY,GAAY,WAAW,KAAK,YAAY,CAAC;IAC3D,MAAM,GAAG,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvD,yEAAyE;IACzE,8CAA8C;IAC9C,MAAM,cAAc,GAAW,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAW,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,MAAM,MAAM,GAAW,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IACtD,MAAM,SAAS,GAAW,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC;IACzE,MAAM,OAAO,GAAW,YAAY,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAW,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,MAAM,MAAM,GAAW,OAAO,CAAC;IAC/B,MAAM,MAAM,GAAW,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAE1D,MAAM,SAAS,GAA0B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CACvB,CAAC;IACF,MAAM,WAAW,GACf,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAW,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC;IAElC,MAAM,QAAQ,GAA+B,CAAC,GAAG,EAAE;QACjD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAW,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,MAAM,IAAI,GAAW,QAAQ,GAAG,KAAK,CAAC;QACtC,MAAM,SAAS,GAAW,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAW,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAE7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAe,EAAE;YAC1C,MAAM,KAAK,GAAW,SAAS,CAAC,KAAK,CAAE,CAAC;YACxC,MAAM,QAAQ,GAAW,KAAK,GAAG,QAAQ,CAAC;YAC1C,MAAM,WAAW,GACf,GAAG,CAAC,KAAK;gBACT,sBAAsB,CAAC,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAE,CAAC;YACjE,MAAM,SAAS,GAAuB,GAAG,CAAC,IAAI;gBAC5C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAElC,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAW,QAAQ,GAAG,KAAK,CAAC;gBAC3C,MAAM,CAAC,GAAW,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;gBAChD,MAAM,CAAC,GAAW,MAAM,CAAC;gBACzB,OAAO;oBACL,GAAG;oBACH,KAAK;oBACL,CAAC;oBACD,CAAC;oBACD,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC;oBACzB,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC;oBACzB,SAAS,EAAE,MAAM,GAAG,CAAC;oBACrB,SAAS,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC;oBAC5B,SAAS;oBACT,IAAI,EAAE,GAAG,CAAC,IAAI;iBACf,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAW,QAAQ,GAAG,KAAK,CAAC;YAC3C,MAAM,CAAC,GAAW,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;YAChD,MAAM,CAAC,GAAW,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;YAC7C,OAAO;gBACL,GAAG;gBACH,KAAK;gBACL,CAAC;gBACD,CAAC;gBACD,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC;gBACzB,MAAM,EAAE,CAAC,GAAG,CAAC;gBACb,SAAS,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC;gBAC5B,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,EAAE;gBAC9B,SAAS;gBACT,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,SAAS,GAA0B,CAAC,GAAG,EAAE;QAC7C,IAAI,aAAa,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,CACL,eACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,KAAK,qBACO,OAAO,eACd,WAAW,sBACH,WAAW,EAC7B,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EACpD,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAC1B,KAAK,aAET,eACE,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,iBACX,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC1C,SAAS,EAAC,gCAAgC,aAE1C,gBAAO,EAAE,EAAE,OAAO,YAAG,KAAK,GAAS,EAElC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACtB,2BACc,MAAM,eACR,qBAAqB,EAC/B,SAAS,EAAC,qBAAqB,YAE9B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;4BACnB,IAAI,YAAY,EAAE,CAAC;gCACjB,MAAM,CAAC,GAAW,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;gCACrC,OAAO,CACL,eAEE,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,GAAG,KAAK,EAClB,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,EAAE,CACX,kBAAkB,EAClB,aAAa,CACd,IATI,QAAQ,CAAC,EAAE,CAUhB,CACH,CAAC;4BACJ,CAAC;4BACD,MAAM,CAAC,GAAW,MAAM,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;4BAC7C,OAAO,CACL,eAEE,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,GAAG,KAAK,EAClB,EAAE,EAAE,CAAC,EACL,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,aAAa,CAAC,IAN3C,QAAQ,CAAC,EAAE,CAOhB,CACH,CAAC;wBACJ,CAAC,CAAC,GACA,CACL,CAAC,CAAC,CAAC,IAAI,EAEP,QAAQ,CAAC,CAAC,CAAC,CACV,4BACY,gBAAgB,EAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,EAC1C,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,EAC1C,EAAE,EAAE,MAAM,GAAG,KAAK,EAClB,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,GAC7C,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,eACE,CAAC,EAAE,CAAC,GAAG,CAAC,EACR,CAAC,EAAE,CAAC,GAAG,CAAC,EACR,UAAU,EAAC,QAAQ,EACnB,gBAAgB,EAAC,SAAS,EAC1B,SAAS,EAAC,uBAAuB,wBAG5B,CACR,CAAC,CAAC,CAAC,CACF,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBACjB,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU,CAAC;wBAC5C,MAAM,aAAa,GAAY,OAAO,OAAO,KAAK,UAAU,CAAC;wBAC7D,OAAO,CACL,eAEE,CAAC,EAAE,CAAC,CAAC,CAAC,EACN,CAAC,EAAE,CAAC,CAAC,CAAC,EACN,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAC9B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAChC,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,CAAC,IAAI,iBACC,CAAC,CAAC,GAAG,CAAC,EAAE,EACrB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAC1C,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,gBAErC,CAAC,CAAC,GAAG,CAAC,KAAK;gCACT,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE;gCAC9B,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,EAE/B,OAAO,EACL,aAAa;gCACX,CAAC,CAAC,CAAC,KAAiC,EAAQ,EAAE;oCAC1C,OAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gCACzB,CAAC;gCACH,CAAC,CAAC,SAAS,EAEf,SAAS,EACP,aAAa;gCACX,CAAC,CAAC,CAAC,KAAoC,EAAQ,EAAE;oCAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;wCAC/C,KAAK,CAAC,cAAc,EAAE,CAAC;wCACvB,OAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oCACzB,CAAC;gCACH,CAAC;gCACH,CAAC,CAAC,SAAS,EAEf,SAAS,EAAE,EAAE,CACX,oBAAoB,EACpB,CAAC,CAAC,SAAS,EACX,aAAa;gCACX,6EAA6E,EAC/E,CAAC,CAAC,GAAG,CAAC,SAAS,CAChB,IAvCI,CAAC,CAAC,GAAG,CAAC,EAAE,CAwCb,CACH,CAAC;oBACJ,CAAC,CAAC,CACH,EAEA,kBAAkB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC3C,2BACc,MAAM,eACR,2BAA2B,EACrC,SAAS,EAAC,iCAAiC,YAE1C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;4BAClB,MAAM,IAAI,GAAW,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC7C,OAAO,CACL,eAEE,CAAC,EAAE,CAAC,CAAC,SAAS,EACd,CAAC,EAAE,CAAC,CAAC,SAAS,EACd,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAC3C,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EACnD,SAAS,EAAE,EAAE,CACX,uBAAuB,EACvB,sBAAsB,CACvB,YAEA,IAAI,IAVA,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAWjB,CACR,CAAC;wBACJ,CAAC,CAAC,GACA,CACL,CAAC,CAAC,CAAC,IAAI,EAEP,eAAe,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACxC,2BACc,MAAM,eACR,wBAAwB,EAClC,SAAS,EAAC,iCAAiC,YAE1C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;4BACzB,MAAM,QAAQ,GAAW,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;4BAC5C,MAAM,IAAI,GAAkB,mBAAmB;gCAC7C,CAAC,CAAC,mBAAmB,CAAC;oCAClB,GAAG,EAAE,CAAC,CAAC,GAAG;oCACV,KAAK,EAAE,CAAC,CAAC,KAAK;oCACd,QAAQ;oCACR,UAAU,EAAE,QAAQ,GAAG,GAAG;oCAC1B,KAAK;iCACN,CAAC;gCACJ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;4BACpB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;gCAAE,OAAO,IAAI,CAAC;4BAC9C,OAAO,CACL,eAEE,CAAC,EAAE,CAAC,CAAC,MAAM,EACX,CAAC,EAAE,CAAC,CAAC,MAAM,EACX,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAC7C,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EACnD,SAAS,EAAE,EAAE,CACX,6BAA6B,EAC7B,mBAAmB,CACpB,YAEA,IAAI,IAVA,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAWjB,CACR,CAAC;wBACJ,CAAC,CAAC,GACA,CACL,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,QAAQ,CAAC,CAAC,CAAC,CACV,cACE,SAAS,EAAE,EAAE,CACX,mFAAmF,EACnF,gBAAgB,CACjB,YAEA,QAAQ,GACL,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AACD,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { BarChart, barChartVariants, barChartSizeIds, barChartOrientationIds, barChartBarColorIds, } from "./bar-chart";
2
+ export type * from "./bar-chart";
3
+ export { BarChart as default } from "./bar-chart";
@@ -0,0 +1,3 @@
1
+ export { BarChart, barChartVariants, barChartSizeIds, barChartOrientationIds, barChartBarColorIds, } from "./bar-chart";
2
+ export { BarChart as default } from "./bar-chart";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/bar-chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC"}
@@ -154,5 +154,9 @@ export * from "./calendar-heatmap";
154
154
  export type * from "./calendar-heatmap";
155
155
  export * from "./pie-chart";
156
156
  export type * from "./pie-chart";
157
+ export * from "./bar-chart";
158
+ export type * from "./bar-chart";
157
159
  export * from "./comparison-slider";
158
160
  export type * from "./comparison-slider";
161
+ export * from "./theme-selector";
162
+ export type * from "./theme-selector";
@@ -76,5 +76,7 @@ export * from "./aspect-ratio";
76
76
  export * from "./color-swatch";
77
77
  export * from "./calendar-heatmap";
78
78
  export * from "./pie-chart";
79
+ export * from "./bar-chart";
79
80
  export * from "./comparison-slider";
81
+ export * from "./theme-selector";
80
82
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AAGzB,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC;AAGxB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,kCAAkC,CAAC;AAGjD,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAExB,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,WAAW,CAAC;AAG1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,UAAU,CAAC;AAGzB,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,YAAY,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,OAAO,CAAC;AAGtB,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AAGvB,cAAc,cAAc,CAAC;AAG7B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,aAAa,CAAC;AAG5B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC;AAG5B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AAGzB,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC;AAGxB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,kCAAkC,CAAC;AAGjD,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAExB,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,WAAW,CAAC;AAG1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,UAAU,CAAC;AAGzB,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,YAAY,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,OAAO,CAAC;AAGtB,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AAGvB,cAAc,cAAc,CAAC;AAG7B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,aAAa,CAAC;AAG5B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ThemeSelector, ThemeSelector as default, themeSelectorOptionIds, themeSelectorSizeIds, } from "./theme-selector";
2
+ export type { ThemeSelectorProps, ThemeSelectorOptionId, ThemeSelectorSizeId, } from "./theme-selector";
@@ -0,0 +1,2 @@
1
+ export { ThemeSelector, ThemeSelector as default, themeSelectorOptionIds, themeSelectorSizeIds, } from "./theme-selector";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/theme-selector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,aAAa,IAAI,OAAO,EACxB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { type HTMLAttributes, type ReactElement } from "react";
2
+ export declare const themeSelectorOptionIds: readonly ["light", "system", "dark"];
3
+ export type ThemeSelectorOptionId = (typeof themeSelectorOptionIds)[number];
4
+ export declare const themeSelectorSizeIds: readonly ["sm", "default", "lg"];
5
+ export type ThemeSelectorSizeId = (typeof themeSelectorSizeIds)[number];
6
+ export interface ThemeSelectorProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue"> {
7
+ /** Size of the underlying SegmentedControl. */
8
+ size?: ThemeSelectorSizeId;
9
+ /** Render only the icons, hiding the text labels. */
10
+ iconOnly?: boolean;
11
+ /** Disable interaction with every option. */
12
+ disabled?: boolean;
13
+ }
14
+ /**
15
+ * A brightness theme switcher driven by {@link useBrightnessTheme}, built on
16
+ * top of the {@link SegmentedControl} component.
17
+ *
18
+ * Must be rendered inside a `<BrightnessThemeProvider />`. The theme-aware UI
19
+ * is wrapped in a `<Suspense>` boundary that renders an inert, unselected
20
+ * SegmentedControl fallback until the client has hydrated — this avoids the
21
+ * next-themes server/client hydration mismatch without any mounted-flag state.
22
+ *
23
+ * @see BrightnessThemeProvider
24
+ * @see useBrightnessTheme
25
+ * @see SegmentedControl
26
+ */
27
+ export declare function ThemeSelector({ className, size, iconOnly, disabled, ...rest }: ThemeSelectorProps): ReactElement;
28
+ export declare namespace ThemeSelector {
29
+ var displayName: string;
30
+ }
31
+ export default ThemeSelector;
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Monitor, Moon, Sun } from "lucide-react";
4
+ import { Suspense, use, } from "react";
5
+ import { cn } from "../../../lib/utils";
6
+ import { SegmentedControl, SegmentedControlItem, } from "../../ui/segmented-control";
7
+ import { useBrightnessTheme } from "../../../providers/brightness-theme";
8
+ export const themeSelectorOptionIds = [
9
+ "light",
10
+ "system",
11
+ "dark",
12
+ ];
13
+ export const themeSelectorSizeIds = [
14
+ "sm",
15
+ "default",
16
+ "lg",
17
+ ];
18
+ const themeOptions = [
19
+ { id: "light", label: "Light", icon: Sun },
20
+ { id: "system", label: "System", icon: Monitor },
21
+ { id: "dark", label: "Dark", icon: Moon },
22
+ ];
23
+ const iconSizeBySize = {
24
+ sm: "h-3.5 w-3.5",
25
+ default: "h-4 w-4",
26
+ lg: "h-[1.125rem] w-[1.125rem]",
27
+ };
28
+ function renderThemeItems(size, iconOnly) {
29
+ return themeOptions.map((option) => {
30
+ const Icon = option.icon;
31
+ return (_jsxs(SegmentedControlItem, { value: option.id, "aria-label": option.label, children: [_jsx(Icon, { className: cn(iconSizeBySize[size]), "aria-hidden": "true" }), iconOnly ? null : _jsx("span", { children: option.label })] }, option.id));
32
+ });
33
+ }
34
+ /**
35
+ * A promise used to suspend {@link ThemeSelector} until the app has hydrated on
36
+ * the client. On the server it never settles, so React renders the Suspense
37
+ * fallback into the SSR output (and the client hydrates that same fallback,
38
+ * avoiding the next-themes server/client mismatch). On the client it resolves
39
+ * once, on the macrotask after the first render, after which the real
40
+ * theme-aware UI takes over. The single cached promise is shared by every
41
+ * instance so the gate only opens once per page.
42
+ */
43
+ let hydrationPromise = null;
44
+ function getHydrationPromise() {
45
+ if (typeof window === "undefined") {
46
+ return new Promise(() => { });
47
+ }
48
+ if (!hydrationPromise) {
49
+ hydrationPromise = new Promise((resolve) => {
50
+ setTimeout(resolve);
51
+ });
52
+ }
53
+ return hydrationPromise;
54
+ }
55
+ function ThemeSelectorContent({ size, iconOnly, disabled, className, rest, }) {
56
+ use(getHydrationPromise());
57
+ const { theme, setTheme } = useBrightnessTheme();
58
+ return (_jsx(SegmentedControl, { value: theme ?? "", onValueChange: setTheme, variant: "outline", size: size, disabled: disabled, "aria-label": "Color theme", className: className, ...rest, children: renderThemeItems(size, iconOnly) }));
59
+ }
60
+ function ThemeSelectorFallback({ size, iconOnly, className, }) {
61
+ return (_jsx(SegmentedControl, { value: "", variant: "outline", size: size, disabled: true, "aria-hidden": "true", className: className, children: renderThemeItems(size, iconOnly) }));
62
+ }
63
+ /**
64
+ * A brightness theme switcher driven by {@link useBrightnessTheme}, built on
65
+ * top of the {@link SegmentedControl} component.
66
+ *
67
+ * Must be rendered inside a `<BrightnessThemeProvider />`. The theme-aware UI
68
+ * is wrapped in a `<Suspense>` boundary that renders an inert, unselected
69
+ * SegmentedControl fallback until the client has hydrated — this avoids the
70
+ * next-themes server/client hydration mismatch without any mounted-flag state.
71
+ *
72
+ * @see BrightnessThemeProvider
73
+ * @see useBrightnessTheme
74
+ * @see SegmentedControl
75
+ */
76
+ export function ThemeSelector({ className, size = "default", iconOnly = false, disabled = false, ...rest }) {
77
+ return (_jsx(Suspense, { fallback: _jsx(ThemeSelectorFallback, { size: size, iconOnly: iconOnly, className: className }), children: _jsx(ThemeSelectorContent, { size: size, iconOnly: iconOnly, disabled: disabled, className: className, rest: rest }) }));
78
+ }
79
+ ThemeSelector.displayName = "ThemeSelector";
80
+ export default ThemeSelector;
81
+ //# sourceMappingURL=theme-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-selector.js","sourceRoot":"","sources":["../../../../src/components/ui/theme-selector/theme-selector.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ThemeProvider as NextThemesProvider, useTheme as useBrightnessTheme } from "next-themes";
1
+ import { ThemeProvider as NextThemesProvider, useTheme as useBrightnessTheme, type UseThemeProps as UseBrightnessThemeReturn } from "next-themes";
2
2
  export type BrightnessThemeProviderProps = Parameters<typeof NextThemesProvider>[0];
3
3
  /**
4
4
  *
@@ -9,3 +9,4 @@ export type BrightnessThemeProviderProps = Parameters<typeof NextThemesProvider>
9
9
  export declare function BrightnessThemeProvider({ children, ...props }: BrightnessThemeProviderProps): import("react/jsx-runtime").JSX.Element;
10
10
  export default BrightnessThemeProvider;
11
11
  export { useBrightnessTheme };
12
+ export type { UseBrightnessThemeReturn };
@@ -1 +1 @@
1
- {"version":3,"file":"brightness-theme.js","sourceRoot":"","sources":["../../../src/providers/brightness-theme/brightness-theme.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EACL,aAAa,IAAI,kBAAkB,EACnC,QAAQ,IAAI,kBAAkB,GAC/B,MAAM,aAAa,CAAC;AAMrB;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,EACtC,QAAQ,EACR,GAAG,KAAK,EACqB;IAC7B,OAAO,KAAC,kBAAkB,OAAK,KAAK,YAAG,QAAQ,GAAsB,CAAC;AACxE,CAAC;AAED,eAAe,uBAAuB,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"brightness-theme.js","sourceRoot":"","sources":["../../../src/providers/brightness-theme/brightness-theme.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EACL,aAAa,IAAI,kBAAkB,EACnC,QAAQ,IAAI,kBAAkB,GAE/B,MAAM,aAAa,CAAC;AAMrB;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,EACtC,QAAQ,EACR,GAAG,KAAK,EACqB;IAC7B,OAAO,KAAC,kBAAkB,OAAK,KAAK,YAAG,QAAQ,GAAsB,CAAC;AACxE,CAAC;AAED,eAAe,uBAAuB,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export { BrightnessThemeProvider, BrightnessThemeProvider as default, useBrightnessTheme, } from "./brightness-theme";
2
- export type { BrightnessThemeProviderProps } from "./brightness-theme";
2
+ export type { BrightnessThemeProviderProps, UseBrightnessThemeReturn, } from "./brightness-theme";
@@ -1,4 +1,4 @@
1
1
  export { LazyFramerMotionProvider } from "./lazy_framer";
2
2
  export type { LazyFramerMotionProviderProps } from "./lazy_framer";
3
- export { BrightnessThemeProvider } from "./brightness-theme";
4
- export type { BrightnessThemeProviderProps } from "./brightness-theme";
3
+ export { BrightnessThemeProvider, useBrightnessTheme } from "./brightness-theme";
4
+ export type { BrightnessThemeProviderProps, UseBrightnessThemeReturn, } from "./brightness-theme";
@@ -1,4 +1,4 @@
1
1
  "use client";
2
2
  export { LazyFramerMotionProvider } from "./lazy_framer";
3
- export { BrightnessThemeProvider } from "./brightness-theme";
3
+ export { BrightnessThemeProvider, useBrightnessTheme } from "./brightness-theme";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schemavaults/ui",
3
- "version": "0.47.0",
3
+ "version": "0.49.0",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "description": "React.js UI components for SchemaVaults frontend applications",