@schemavaults/ui 0.82.0 → 0.84.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.
@@ -124,6 +124,8 @@ export * from "./scroll-progress";
124
124
  export type * from "./scroll-progress";
125
125
  export * from "./gauge";
126
126
  export type * from "./gauge";
127
+ export * from "./meter";
128
+ export type * from "./meter";
127
129
  export * from "./breadcrumb";
128
130
  export type * from "./breadcrumb";
129
131
  export * from "./pagination";
@@ -182,6 +184,8 @@ export * from "./bar-chart";
182
184
  export type * from "./bar-chart";
183
185
  export * from "./line-chart";
184
186
  export type * from "./line-chart";
187
+ export * from "./radar-chart";
188
+ export type * from "./radar-chart";
185
189
  export * from "./comparison-slider";
186
190
  export type * from "./comparison-slider";
187
191
  export * from "./theme-selector";
@@ -61,6 +61,7 @@ export * from "./progress-bar";
61
61
  export * from "./circular-progress";
62
62
  export * from "./scroll-progress";
63
63
  export * from "./gauge";
64
+ export * from "./meter";
64
65
  export * from "./breadcrumb";
65
66
  export * from "./pagination";
66
67
  export * from "./kbd";
@@ -90,6 +91,7 @@ export * from "./calendar-heatmap";
90
91
  export * from "./pie-chart";
91
92
  export * from "./bar-chart";
92
93
  export * from "./line-chart";
94
+ export * from "./radar-chart";
93
95
  export * from "./comparison-slider";
94
96
  export * from "./theme-selector";
95
97
  export * from "./tree-view";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AAGzB,cAAc,uBAAuB,CAAC;AAGtC,cAAc,aAAa,CAAC;AAG5B,cAAc,eAAe,CAAC;AAG9B,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,cAAc,CAAC;AAG7B,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,mBAAmB,CAAC;AAGlC,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,gBAAgB,CAAC;AAG/B,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,gBAAgB,CAAC;AAG/B,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,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,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,mBAAmB,CAAC;AAGlC,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,WAAW,CAAC;AAG1B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,eAAe,CAAC;AAG9B,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,cAAc,CAAC;AAG7B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,YAAY,CAAC;AAG3B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,eAAe,CAAC;AAG9B,cAAc,QAAQ,CAAC;AAGvB,cAAc,qBAAqB,CAAC;AAGpC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,eAAe,CAAC;AAG9B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { Meter, meterVariants, meterIndicatorVariants, meterSizeIds, meterColorIds, } from "./meter";
2
+ export type * from "./meter";
3
+ export { Meter as default } from "./meter";
@@ -0,0 +1,3 @@
1
+ export { Meter, meterVariants, meterIndicatorVariants, meterSizeIds, meterColorIds, } from "./meter";
2
+ export { Meter as default } from "./meter";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/meter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ import type { HTMLAttributes, ReactElement, ReactNode } from "react";
3
+ export declare const meterSizeIds: readonly ["sm", "default", "lg"];
4
+ export type MeterSizeId = (typeof meterSizeIds)[number];
5
+ export declare const meterColorIds: readonly ["default", "positive", "warning", "destructive"];
6
+ export type MeterColorId = (typeof meterColorIds)[number];
7
+ export declare const meterVariants: (props?: ({
8
+ size?: "sm" | "default" | "lg" | null | undefined;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
+ export declare const meterIndicatorVariants: (props?: ({
11
+ color?: "default" | "warning" | "destructive" | "positive" | null | undefined;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
+ export interface MeterProps extends Omit<HTMLAttributes<HTMLDivElement>, "role" | "color">, VariantProps<typeof meterVariants>, VariantProps<typeof meterIndicatorVariants> {
14
+ /** Current value (clamped to [min, max]). */
15
+ value: number;
16
+ /** Accessible label describing what the meter represents. */
17
+ label: string;
18
+ /** Minimum value (defaults to 0). */
19
+ min?: number;
20
+ /** Maximum value (defaults to 100). */
21
+ max?: number;
22
+ /**
23
+ * Upper bound of the "low" band. Values below `low` are considered low.
24
+ * Defaults to `min` (i.e. no low band).
25
+ */
26
+ low?: number;
27
+ /**
28
+ * Lower bound of the "high" band. Values above `high` are considered high.
29
+ * Defaults to `max` (i.e. no high band).
30
+ */
31
+ high?: number;
32
+ /**
33
+ * Ideal value. When `optimum` sits between `low` and `high`, the mid
34
+ * band is optimal; otherwise the band containing `optimum` is optimal.
35
+ * Defaults to the midpoint of [min, max].
36
+ */
37
+ optimum?: number;
38
+ /**
39
+ * When true, the indicator color is chosen automatically based on where
40
+ * the current value sits relative to the thresholds — overriding `color`.
41
+ */
42
+ autoColorFromThresholds?: boolean;
43
+ /**
44
+ * When true (default), renders the label above the bar. Set to `false` to
45
+ * hide the visible label (it is still announced via `aria-label`).
46
+ */
47
+ showLabel?: boolean;
48
+ /** When true (default), renders the numeric value alongside the label. */
49
+ showValue?: boolean;
50
+ /**
51
+ * When true, faintly renders the threshold band edges behind the
52
+ * indicator so the reader can see where "low", "mid", and "high" sit.
53
+ */
54
+ showThresholdMarks?: boolean;
55
+ /** Displayed unit next to the value (e.g. "%", "GB"). */
56
+ unit?: string;
57
+ /**
58
+ * Optional formatter for the value shown next to the label. Overrides
59
+ * the default `Math.round(value) + unit` display.
60
+ */
61
+ formatValue?: (value: number) => ReactNode;
62
+ /** Additional classes for the filled indicator. */
63
+ indicatorClassName?: string;
64
+ /** Additional classes for the header row containing label + value. */
65
+ headerClassName?: string;
66
+ /** Additional classes for the label text. */
67
+ labelClassName?: string;
68
+ /** Additional classes for the value text. */
69
+ valueClassName?: string;
70
+ }
71
+ export declare function Meter({ value, label, min, max, low, high, optimum, size, color, autoColorFromThresholds, showLabel, showValue, showThresholdMarks, unit, formatValue, className, indicatorClassName, headerClassName, labelClassName, valueClassName, ...props }: MeterProps): ReactElement;
72
+ export declare namespace Meter {
73
+ var displayName: string;
74
+ }
@@ -0,0 +1,125 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ import { m } from "../../../framer-motion";
5
+ import { cn } from "../../../lib/utils";
6
+ export const meterSizeIds = ["sm", "default", "lg"];
7
+ export const meterColorIds = [
8
+ "default",
9
+ "positive",
10
+ "warning",
11
+ "destructive",
12
+ ];
13
+ export const meterVariants = cva("relative w-full overflow-hidden rounded-full bg-secondary", {
14
+ variants: {
15
+ size: {
16
+ sm: "h-1.5",
17
+ default: "h-2.5",
18
+ lg: "h-4",
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ size: "default",
23
+ },
24
+ });
25
+ export const meterIndicatorVariants = cva("h-full rounded-full transition-colors duration-300", {
26
+ variants: {
27
+ color: {
28
+ default: "bg-schemavaults-brand-blue",
29
+ positive: "bg-emerald-500 dark:bg-emerald-400",
30
+ warning: "bg-warning",
31
+ destructive: "bg-destructive",
32
+ },
33
+ },
34
+ defaultVariants: {
35
+ color: "default",
36
+ },
37
+ });
38
+ const meterValueTextVariants = cva("tabular-nums text-foreground", {
39
+ variants: {
40
+ size: {
41
+ sm: "text-xs",
42
+ default: "text-sm",
43
+ lg: "text-base",
44
+ },
45
+ },
46
+ defaultVariants: {
47
+ size: "default",
48
+ },
49
+ });
50
+ /**
51
+ * A meter behaves like the HTML `<meter>` element: the value is a scalar
52
+ * measurement inside a known range, with optional quality thresholds
53
+ * (`low`, `high`, `optimum`) that define which sub-range is preferable.
54
+ *
55
+ * The rules are the same as `<meter>`:
56
+ * - "optimum" marks the ideal value.
57
+ * - If `optimum` falls between `low` and `high`, values inside the same
58
+ * band are considered optimal, adjacent bands are sub-optimal, and the
59
+ * farthest band is considered bad.
60
+ * - When only one of `low`/`high` is set, the missing side extends to the
61
+ * matching endpoint.
62
+ *
63
+ * When `autoColorFromThresholds` is enabled the indicator color is chosen
64
+ * automatically from the resolved quality: optimum → positive, sub-optimum
65
+ * → warning, worst → destructive.
66
+ */
67
+ function clampValue(value, min, max) {
68
+ return Math.min(max, Math.max(min, value));
69
+ }
70
+ function valueToPercentage(value, min, max) {
71
+ if (max === min) {
72
+ return 0;
73
+ }
74
+ return ((value - min) / (max - min)) * 100;
75
+ }
76
+ function resolveQuality(value, low, high, optimum) {
77
+ const inLow = value < low;
78
+ const inHigh = value > high;
79
+ const inMid = !inLow && !inHigh;
80
+ const optimumInMid = optimum >= low && optimum <= high;
81
+ const optimumInLow = optimum < low;
82
+ const optimumInHigh = optimum > high;
83
+ if (optimumInMid) {
84
+ return inMid ? "optimum" : "sub-optimum";
85
+ }
86
+ if (optimumInLow) {
87
+ if (inLow) {
88
+ return "optimum";
89
+ }
90
+ return inMid ? "sub-optimum" : "worst";
91
+ }
92
+ if (optimumInHigh) {
93
+ if (inHigh) {
94
+ return "optimum";
95
+ }
96
+ return inMid ? "sub-optimum" : "worst";
97
+ }
98
+ return inMid ? "optimum" : "sub-optimum";
99
+ }
100
+ const QUALITY_TO_COLOR = {
101
+ optimum: "positive",
102
+ "sub-optimum": "warning",
103
+ worst: "destructive",
104
+ };
105
+ export function Meter({ value, label, min = 0, max = 100, low, high, optimum, size, color, autoColorFromThresholds = false, showLabel = true, showValue = true, showThresholdMarks = false, unit, formatValue, className, indicatorClassName, headerClassName, labelClassName, valueClassName, ...props }) {
106
+ const resolvedSize = size ?? "default";
107
+ const resolvedLow = low ?? min;
108
+ const resolvedHigh = high ?? max;
109
+ const resolvedOptimum = optimum ?? (min + max) / 2;
110
+ const clamped = clampValue(value, min, max);
111
+ const percentage = valueToPercentage(clamped, min, max);
112
+ const quality = resolveQuality(clamped, resolvedLow, resolvedHigh, resolvedOptimum);
113
+ const indicatorColor = autoColorFromThresholds
114
+ ? QUALITY_TO_COLOR[quality]
115
+ : (color ?? "default");
116
+ const lowPct = valueToPercentage(clampValue(resolvedLow, min, max), min, max);
117
+ const highPct = valueToPercentage(clampValue(resolvedHigh, min, max), min, max);
118
+ const showLowMark = showThresholdMarks && lowPct > 0 && lowPct < 100;
119
+ const showHighMark = showThresholdMarks && highPct > 0 && highPct < 100 && highPct !== lowPct;
120
+ const showHeader = showLabel || showValue;
121
+ const defaultFormattedValue = (_jsxs(_Fragment, { children: [Math.round(clamped), unit && (_jsx("span", { className: "ml-0.5 text-muted-foreground", children: unit }))] }));
122
+ return (_jsxs("div", { className: cn("flex w-full flex-col gap-1", className), ...props, children: [showHeader && (_jsxs("div", { className: cn("flex items-baseline justify-between gap-2", headerClassName), children: [showLabel && (_jsx("span", { className: cn(meterValueTextVariants({ size: resolvedSize }), "text-muted-foreground", labelClassName), children: label })), showValue && (_jsx("span", { className: cn(meterValueTextVariants({ size: resolvedSize }), "font-medium", valueClassName), children: formatValue ? formatValue(clamped) : defaultFormattedValue }))] })), _jsxs("div", { role: "meter", "aria-valuenow": clamped, "aria-valuemin": min, "aria-valuemax": max, "aria-label": label, className: cn(meterVariants({ size: resolvedSize })), children: [showLowMark && (_jsx("span", { "aria-hidden": "true", className: "absolute inset-y-0 w-px bg-foreground/25", style: { left: `${lowPct}%` } })), showHighMark && (_jsx("span", { "aria-hidden": "true", className: "absolute inset-y-0 w-px bg-foreground/25", style: { left: `${highPct}%` } })), _jsx(m.div, { initial: { width: 0 }, animate: { width: `${percentage}%` }, transition: { duration: 0.4, ease: "easeOut" }, className: cn(meterIndicatorVariants({ color: indicatorColor }), indicatorClassName) })] })] }));
123
+ }
124
+ Meter.displayName = "Meter";
125
+ //# sourceMappingURL=meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.js","sourceRoot":"","sources":["../../../../src/components/ui/meter/meter.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { RadarChart, radarChartVariants, radarChartSizeIds, radarChartColorIds, radarChartGridShapeIds, } from "./radar-chart";
2
+ export type * from "./radar-chart";
3
+ export { RadarChart as default } from "./radar-chart";
@@ -0,0 +1,3 @@
1
+ export { RadarChart, radarChartVariants, radarChartSizeIds, radarChartColorIds, radarChartGridShapeIds, } from "./radar-chart";
2
+ export { RadarChart as default } from "./radar-chart";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/radar-chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,146 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ import type { HTMLAttributes, KeyboardEvent, MouseEvent, ReactElement, ReactNode, Ref } from "react";
3
+ export declare const radarChartSizeIds: ["sm", "md", "lg", "xl"];
4
+ export type RadarChartSizeId = (typeof radarChartSizeIds)[number];
5
+ export declare const radarChartColorIds: ["default", "primary", "positive", "warning", "destructive", "muted"];
6
+ export type RadarChartColorId = (typeof radarChartColorIds)[number];
7
+ export declare const radarChartGridShapeIds: ["polygon", "circle"];
8
+ export type RadarChartGridShapeId = (typeof radarChartGridShapeIds)[number];
9
+ export declare const radarChartVariants: (props?: ({
10
+ size?: "sm" | "lg" | "xl" | "md" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ export interface RadarChartAxis {
13
+ /** Stable identifier used as React key. */
14
+ id: string;
15
+ /** Human-readable label placed at the axis tip. */
16
+ label?: string;
17
+ /**
18
+ * Optional per-axis maximum. Overrides the chart-level `max` for scaling
19
+ * this axis' values only. Useful when axes are measured on different scales.
20
+ */
21
+ max?: number;
22
+ /**
23
+ * Optional per-axis minimum. Overrides the chart-level `min` for scaling
24
+ * this axis' values only.
25
+ */
26
+ min?: number;
27
+ }
28
+ export interface RadarChartSeriesPoint {
29
+ /** Numeric value for the axis at the same index. Non-finite = gap. */
30
+ value: number;
31
+ /** Human-readable label used in aria-labels and tooltips. */
32
+ label?: string;
33
+ }
34
+ export interface RadarChartSeries {
35
+ /** Stable identifier used as React key and click payload. */
36
+ id: string;
37
+ /** Display name for the series. */
38
+ label?: string;
39
+ /**
40
+ * One value per axis, in axis order. Extra values are ignored and missing
41
+ * values are treated as gaps. Values may be raw numbers or point objects
42
+ * with an optional label.
43
+ */
44
+ values: ReadonlyArray<number | RadarChartSeriesPoint>;
45
+ /** Preset color id from the chart palette. Ignored if `stroke` is provided. */
46
+ color?: RadarChartColorId;
47
+ /**
48
+ * Override the stroke with a raw CSS color (e.g. `"#ff0080"` or
49
+ * `"hsl(var(--chart-1))"`). Takes precedence over `color`.
50
+ */
51
+ stroke?: string;
52
+ /** Fill the shape. Defaults to the chart-level `area` (true). */
53
+ area?: boolean;
54
+ /** Opacity applied to the filled area. Defaults to `0.2`. */
55
+ fillOpacity?: number;
56
+ /** Stroke width in user units. Defaults to `2`. */
57
+ strokeWidth?: number;
58
+ /** Stroke dash pattern, e.g. `"4 3"`. Defaults to a solid line. */
59
+ strokeDasharray?: string;
60
+ /** Override the chart-level `showPoints`. */
61
+ showPoints?: boolean;
62
+ /** Extra classes applied to this series' shape `<path>`. */
63
+ className?: string;
64
+ /** Fired when a vertex in this series is clicked or activated via keyboard. */
65
+ onPointClick?: (axis: RadarChartAxis, value: number, series: RadarChartSeries, event: MouseEvent<SVGCircleElement> | KeyboardEvent<SVGCircleElement>) => void;
66
+ }
67
+ export interface RadarChartValueLabelContext {
68
+ series: RadarChartSeries;
69
+ axis: RadarChartAxis;
70
+ value: number;
71
+ axisIndex: number;
72
+ }
73
+ export interface RadarChartProps extends Omit<HTMLAttributes<HTMLDivElement>, "onClick">, VariantProps<typeof radarChartVariants> {
74
+ /** Axes to render, in order (clockwise starting from 12 o'clock). */
75
+ axes: ReadonlyArray<RadarChartAxis>;
76
+ /** Series to render, in order (later series are drawn on top). */
77
+ series: ReadonlyArray<RadarChartSeries>;
78
+ /** Accessible label describing what the chart represents. */
79
+ label: string;
80
+ /** Override the rendered diameter in pixels (defaults are size-aware). */
81
+ diameter?: number;
82
+ /**
83
+ * Lower bound of the value axis. Defaults to `0`. Applied per-axis unless the
84
+ * axis specifies its own `min`.
85
+ */
86
+ min?: number;
87
+ /**
88
+ * Upper bound of the value axis. Defaults to the largest value across
89
+ * series. Applied per-axis unless the axis specifies its own `max`.
90
+ */
91
+ max?: number;
92
+ /**
93
+ * Angle in degrees at which the first axis is placed. `0` = 12 o'clock;
94
+ * positive rotates clockwise. Defaults to `0`.
95
+ */
96
+ startAngle?: number;
97
+ /**
98
+ * Number of concentric grid rings (excluding the outer boundary). Defaults
99
+ * to `4`. Set to `0` to hide grid rings.
100
+ */
101
+ gridLevels?: number;
102
+ /** Shape of the grid rings. Defaults to `"polygon"`. */
103
+ gridShape?: RadarChartGridShapeId;
104
+ /** Render the axis spokes. Defaults to `true`. */
105
+ showAxis?: boolean;
106
+ /** Render the axis labels at each spoke tip. Defaults to `true`. */
107
+ showAxisLabels?: boolean;
108
+ /** Render the outer boundary ring. Defaults to `true`. */
109
+ showBoundary?: boolean;
110
+ /**
111
+ * Fill the area under each series' shape. Individual series can override.
112
+ * Defaults to `true`.
113
+ */
114
+ area?: boolean;
115
+ /** Render point markers at every axis vertex. Defaults to `false`. */
116
+ showPoints?: boolean;
117
+ /** Render a value label at every axis vertex. Defaults to `false`. */
118
+ showValueLabels?: boolean;
119
+ /**
120
+ * Customize the value-label text. Return `null` to skip a point. Defaults
121
+ * to the raw value (`String(value)`).
122
+ */
123
+ valueLabelFormatter?: (context: RadarChartValueLabelContext) => string | null;
124
+ /**
125
+ * Fallback handler invoked for any point that doesn't have its own series-
126
+ * level `onPointClick`. Receives the axis, value, and series.
127
+ */
128
+ onPointClick?: (axis: RadarChartAxis, value: number, series: RadarChartSeries, event: MouseEvent<SVGCircleElement> | KeyboardEvent<SVGCircleElement>) => void;
129
+ /** Optional content overlaid at the center of the chart. */
130
+ children?: ReactNode;
131
+ /** Extra classes for the overlay content wrapper. */
132
+ overlayClassName?: string;
133
+ /** Extra classes applied to every axis label `<text>` element. */
134
+ axisLabelClassName?: string;
135
+ /** Extra classes applied to every value-label `<text>` element. */
136
+ valueLabelClassName?: string;
137
+ /** Extra classes applied to the grid / axis `<path>` / `<line>` elements. */
138
+ gridClassName?: string;
139
+ /** Optional ref forwarded to the wrapper element. */
140
+ ref?: Ref<HTMLDivElement>;
141
+ }
142
+ declare function RadarChart({ axes, series, label, size, diameter, min, max, startAngle, gridLevels, gridShape, showAxis, showAxisLabels, showBoundary, area, showPoints, showValueLabels, valueLabelFormatter, onPointClick, children, className, overlayClassName, axisLabelClassName, valueLabelClassName, gridClassName, ref, ...props }: RadarChartProps): ReactElement;
143
+ declare namespace RadarChart {
144
+ var displayName: string;
145
+ }
146
+ export { RadarChart };
@@ -0,0 +1,312 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } 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 radarChartSizeIds = [
7
+ "sm",
8
+ "md",
9
+ "lg",
10
+ "xl",
11
+ ];
12
+ export const radarChartColorIds = [
13
+ "default",
14
+ "primary",
15
+ "positive",
16
+ "warning",
17
+ "destructive",
18
+ "muted",
19
+ ];
20
+ export const radarChartGridShapeIds = [
21
+ "polygon",
22
+ "circle",
23
+ ];
24
+ const SIZE_TO_PIXELS = {
25
+ sm: 160,
26
+ md: 240,
27
+ lg: 320,
28
+ xl: 420,
29
+ };
30
+ const STROKE_CLASSES = {
31
+ default: "stroke-schemavaults-brand-blue",
32
+ primary: "stroke-primary",
33
+ positive: "stroke-emerald-500 dark:stroke-emerald-400",
34
+ warning: "stroke-warning",
35
+ destructive: "stroke-destructive",
36
+ muted: "stroke-muted-foreground",
37
+ };
38
+ const FILL_CLASSES = {
39
+ default: "fill-schemavaults-brand-blue",
40
+ primary: "fill-primary",
41
+ positive: "fill-emerald-500 dark:fill-emerald-400",
42
+ warning: "fill-warning",
43
+ destructive: "fill-destructive",
44
+ muted: "fill-muted-foreground",
45
+ };
46
+ const TEXT_CLASSES = {
47
+ default: "text-schemavaults-brand-blue",
48
+ primary: "text-primary",
49
+ positive: "text-emerald-500 dark:text-emerald-400",
50
+ warning: "text-warning",
51
+ destructive: "text-destructive",
52
+ muted: "text-muted-foreground",
53
+ };
54
+ /**
55
+ * Fallback color rotation when a series doesn't specify its own color. Index
56
+ * is the series position in the input array, modulo the palette length.
57
+ */
58
+ const DEFAULT_COLOR_ROTATION = [
59
+ "default",
60
+ "positive",
61
+ "warning",
62
+ "destructive",
63
+ "primary",
64
+ "muted",
65
+ ];
66
+ export const radarChartVariants = cva("relative inline-flex shrink-0 items-center justify-center", {
67
+ variants: {
68
+ size: {
69
+ sm: "text-[10px]",
70
+ md: "text-[11px]",
71
+ lg: "text-xs",
72
+ xl: "text-sm",
73
+ },
74
+ },
75
+ defaultVariants: {
76
+ size: "md",
77
+ },
78
+ });
79
+ function isFiniteNumber(value) {
80
+ return typeof value === "number" && Number.isFinite(value);
81
+ }
82
+ function normalizeValue(value) {
83
+ if (value === undefined) {
84
+ return { value: 0, label: undefined, isGap: true };
85
+ }
86
+ if (typeof value === "number") {
87
+ return {
88
+ value: isFiniteNumber(value) ? value : 0,
89
+ label: undefined,
90
+ isGap: !isFiniteNumber(value),
91
+ };
92
+ }
93
+ const raw = value.value;
94
+ return {
95
+ value: isFiniteNumber(raw) ? raw : 0,
96
+ label: value.label,
97
+ isGap: !isFiniteNumber(raw),
98
+ };
99
+ }
100
+ function buildShapePath(points) {
101
+ // Skip gaps by breaking the path into separate closed sub-paths whenever a
102
+ // run of non-gap vertices ends. Wrap around the end/start of the axis list.
103
+ const n = points.length;
104
+ if (n === 0)
105
+ return "";
106
+ // Find the first non-gap so wrapped runs stay contiguous.
107
+ let start = 0;
108
+ while (start < n && points[start].isGap)
109
+ start += 1;
110
+ if (start === n)
111
+ return "";
112
+ const segments = [];
113
+ let current = [];
114
+ for (let i = 0; i < n; i += 1) {
115
+ const p = points[(start + i) % n];
116
+ if (p.isGap) {
117
+ if (current.length > 0) {
118
+ segments.push(current);
119
+ current = [];
120
+ }
121
+ continue;
122
+ }
123
+ current.push(p);
124
+ }
125
+ if (current.length > 0)
126
+ segments.push(current);
127
+ // If the shape wraps fully around (no gaps at all), it's a single closed
128
+ // polygon connecting back to the first vertex.
129
+ const allClosed = segments.length === 1 && segments[0].length === n;
130
+ let d = "";
131
+ for (const seg of segments) {
132
+ if (seg.length === 0)
133
+ continue;
134
+ const first = seg[0];
135
+ d += `${d ? " " : ""}M ${first.x.toFixed(2)} ${first.y.toFixed(2)}`;
136
+ for (let i = 1; i < seg.length; i += 1) {
137
+ const p = seg[i];
138
+ d += ` L ${p.x.toFixed(2)} ${p.y.toFixed(2)}`;
139
+ }
140
+ if (allClosed)
141
+ d += " Z";
142
+ }
143
+ return d;
144
+ }
145
+ function buildRingPath(cx, cy, ratio, axesAngles, radius, shape) {
146
+ if (shape === "circle") {
147
+ const r = radius * ratio;
148
+ // Two arcs to draw a full circle in SVG.
149
+ return `M ${(cx + r).toFixed(2)} ${cy.toFixed(2)} A ${r.toFixed(2)} ${r.toFixed(2)} 0 1 1 ${(cx - r).toFixed(2)} ${cy.toFixed(2)} A ${r.toFixed(2)} ${r.toFixed(2)} 0 1 1 ${(cx + r).toFixed(2)} ${cy.toFixed(2)} Z`;
150
+ }
151
+ if (axesAngles.length === 0)
152
+ return "";
153
+ let d = "";
154
+ axesAngles.forEach((angle, idx) => {
155
+ const x = cx + Math.sin(angle) * radius * ratio;
156
+ const y = cy - Math.cos(angle) * radius * ratio;
157
+ d += `${idx === 0 ? "M" : " L"} ${x.toFixed(2)} ${y.toFixed(2)}`;
158
+ });
159
+ return `${d} Z`;
160
+ }
161
+ function RadarChart({ axes, series, label, size, diameter, min = 0, max, startAngle = 0, gridLevels = 4, gridShape = "polygon", showAxis = true, showAxisLabels = true, showBoundary = true, area = true, showPoints = false, showValueLabels = false, valueLabelFormatter, onPointClick, children, className, overlayClassName, axisLabelClassName, valueLabelClassName, gridClassName, ref, ...props }) {
162
+ const resolvedSize = size ?? "md";
163
+ const D = diameter ?? SIZE_TO_PIXELS[resolvedSize];
164
+ const titleId = useId();
165
+ const axisLabelGutter = showAxisLabels ? 44 : 8;
166
+ const radius = Math.max(0, D / 2 - axisLabelGutter / 2);
167
+ const cx = D / 2;
168
+ const cy = D / 2;
169
+ const axisCount = axes.length;
170
+ const hasAxes = axisCount >= 3;
171
+ const hasSeries = series.length > 0;
172
+ // Compute a chart-level max fallback from data.
173
+ const dataMax = (() => {
174
+ let m = Number.NEGATIVE_INFINITY;
175
+ for (const s of series) {
176
+ for (const raw of s.values) {
177
+ const n = normalizeValue(raw);
178
+ if (!n.isGap && n.value > m)
179
+ m = n.value;
180
+ }
181
+ }
182
+ return Number.isFinite(m) ? m : 1;
183
+ })();
184
+ const effectiveMax = isFiniteNumber(max) ? max : dataMax;
185
+ const startAngleRad = (startAngle * Math.PI) / 180;
186
+ const resolvedAxes = axes.map((axis, idx) => {
187
+ const angle = startAngleRad + (idx * (2 * Math.PI)) / Math.max(1, axisCount);
188
+ const axisMin = isFiniteNumber(axis.min) ? axis.min : min;
189
+ const axisMax = isFiniteNumber(axis.max) ? axis.max : effectiveMax;
190
+ return {
191
+ axis,
192
+ angle,
193
+ min: axisMin,
194
+ max: axisMax,
195
+ tipX: cx + Math.sin(angle) * radius,
196
+ tipY: cy - Math.cos(angle) * radius,
197
+ };
198
+ });
199
+ const axesAngles = resolvedAxes.map((a) => a.angle);
200
+ const resolvedSeries = series.map((s, seriesIndex) => {
201
+ const color = s.color ??
202
+ DEFAULT_COLOR_ROTATION[seriesIndex % DEFAULT_COLOR_ROTATION.length];
203
+ const seriesShowPoints = s.showPoints ?? showPoints;
204
+ const seriesArea = s.area ?? area;
205
+ const points = resolvedAxes.map((ra, axisIndex) => {
206
+ const raw = s.values[axisIndex];
207
+ const norm = normalizeValue(raw);
208
+ const span = ra.max - ra.min > 0 ? ra.max - ra.min : 1;
209
+ const clamped = Math.max(0, Math.min(1, (norm.value - ra.min) / span));
210
+ const r = norm.isGap ? 0 : clamped * radius;
211
+ return {
212
+ axisIndex,
213
+ value: norm.value,
214
+ label: norm.label,
215
+ isGap: norm.isGap,
216
+ x: cx + Math.sin(ra.angle) * r,
217
+ y: cy - Math.cos(ra.angle) * r,
218
+ };
219
+ });
220
+ return {
221
+ series: s,
222
+ color,
223
+ points,
224
+ showPoints: seriesShowPoints,
225
+ area: seriesArea,
226
+ };
227
+ });
228
+ const gridRatios = (() => {
229
+ if (gridLevels <= 0)
230
+ return [];
231
+ const out = [];
232
+ for (let i = 1; i <= gridLevels; i += 1) {
233
+ out.push(i / (gridLevels + 1));
234
+ }
235
+ return out;
236
+ })();
237
+ return (_jsxs("div", { ref: ref, role: "img", "aria-labelledby": titleId, "data-slot": "radar-chart", className: cn(radarChartVariants({ size }), className), style: { width: D, height: D }, ...props, children: [_jsxs("svg", { width: D, height: D, viewBox: `0 0 ${D} ${D}`, "aria-hidden": children ? "true" : undefined, className: "h-full w-full overflow-visible", children: [_jsx("title", { id: titleId, children: label }), !hasAxes ? (_jsx("text", { x: D / 2, y: D / 2, textAnchor: "middle", dominantBaseline: "central", className: "fill-muted-foreground", children: axisCount === 0 ? "No axes" : "Need ≥3 axes" })) : (_jsxs(_Fragment, { children: [gridRatios.length > 0 ? (_jsx("g", { "aria-hidden": "true", "data-slot": "radar-chart-grid", className: "pointer-events-none", children: gridRatios.map((r) => (_jsx("path", { d: buildRingPath(cx, cy, r, axesAngles, radius, gridShape), fill: "none", strokeWidth: 1, className: cn("stroke-border/60", gridClassName) }, `grid-${r}`))) })) : null, showBoundary ? (_jsx("path", { "aria-hidden": "true", "data-slot": "radar-chart-boundary", d: buildRingPath(cx, cy, 1, axesAngles, radius, gridShape), fill: "none", strokeWidth: 1, className: cn("stroke-border", gridClassName) })) : null, showAxis ? (_jsx("g", { "aria-hidden": "true", "data-slot": "radar-chart-axes", className: "pointer-events-none", children: resolvedAxes.map((ra) => (_jsx("line", { x1: cx, y1: cy, x2: ra.tipX, y2: ra.tipY, strokeWidth: 1, className: cn("stroke-border", gridClassName) }, `axis-${ra.axis.id}`))) })) : null, hasSeries ? (resolvedSeries.map((rs) => {
238
+ const strokeWidth = rs.series.strokeWidth ?? 2;
239
+ const shapePath = buildShapePath(rs.points);
240
+ const strokeClass = rs.series.stroke
241
+ ? undefined
242
+ : STROKE_CLASSES[rs.color];
243
+ const fillClass = rs.series.stroke
244
+ ? undefined
245
+ : FILL_CLASSES[rs.color];
246
+ const textClass = rs.series.stroke
247
+ ? undefined
248
+ : TEXT_CLASSES[rs.color];
249
+ const fillOpacity = rs.series.fillOpacity ?? 0.2;
250
+ return (_jsxs("g", { "data-slot": "radar-chart-series", "data-series-id": rs.series.id, children: [rs.area && shapePath !== "" ? (_jsx("path", { d: shapePath, stroke: "none", fill: rs.series.stroke ?? "currentColor", fillOpacity: fillOpacity, className: cn(fillClass, "pointer-events-none") })) : null, shapePath !== "" ? (_jsx("path", { d: shapePath, fill: "none", stroke: rs.series.stroke, strokeWidth: strokeWidth, strokeLinecap: "round", strokeLinejoin: "round", strokeDasharray: rs.series.strokeDasharray, className: cn(strokeClass, rs.series.className) })) : null, rs.showPoints
251
+ ? rs.points.map((rp) => {
252
+ if (rp.isGap)
253
+ return null;
254
+ const ra = resolvedAxes[rp.axisIndex];
255
+ const handler = rs.series.onPointClick ?? onPointClick;
256
+ const isInteractive = typeof handler === "function";
257
+ const pointLabel = rp.label ??
258
+ `${rs.series.label ?? rs.series.id} – ${ra.axis.label ?? ra.axis.id}: ${rp.value}`;
259
+ return (_jsx("circle", { cx: rp.x, cy: rp.y, r: Math.max(strokeWidth + 1, 3), fill: rs.series.stroke ?? "currentColor", stroke: "hsl(var(--background))", strokeWidth: 1.5, "data-axis-id": ra.axis.id, role: isInteractive ? "button" : undefined, tabIndex: isInteractive ? 0 : undefined, "aria-label": pointLabel, onClick: isInteractive
260
+ ? (event) => {
261
+ handler(ra.axis, rp.value, rs.series, event);
262
+ }
263
+ : undefined, onKeyDown: isInteractive
264
+ ? (event) => {
265
+ if (event.key === "Enter" ||
266
+ event.key === " ") {
267
+ event.preventDefault();
268
+ handler(ra.axis, rp.value, rs.series, event);
269
+ }
270
+ }
271
+ : undefined, className: cn("transition-opacity", rs.series.stroke ? undefined : fillClass, isInteractive &&
272
+ "cursor-pointer hover:opacity-80 focus:outline-none focus-visible:opacity-80") }, `${rs.series.id}-${ra.axis.id}`));
273
+ })
274
+ : null, showValueLabels
275
+ ? rs.points.map((rp) => {
276
+ if (rp.isGap)
277
+ return null;
278
+ const ra = resolvedAxes[rp.axisIndex];
279
+ const text = valueLabelFormatter
280
+ ? valueLabelFormatter({
281
+ series: rs.series,
282
+ axis: ra.axis,
283
+ value: rp.value,
284
+ axisIndex: rp.axisIndex,
285
+ })
286
+ : String(rp.value);
287
+ if (text === null || text === "")
288
+ return null;
289
+ // Offset the label a couple pixels outward from the
290
+ // vertex so it doesn't collide with the point marker.
291
+ const dx = Math.sin(ra.angle);
292
+ const dy = -Math.cos(ra.angle);
293
+ const offset = 8;
294
+ return (_jsx("text", { x: rp.x + dx * offset, y: rp.y + dy * offset, textAnchor: "middle", dominantBaseline: "central", className: cn("pointer-events-none select-none fill-foreground font-medium", textClass, valueLabelClassName), children: text }, `${rs.series.id}-${ra.axis.id}-val`));
295
+ })
296
+ : null] }, rs.series.id));
297
+ })) : null, showAxisLabels ? (_jsx("g", { "aria-hidden": "true", "data-slot": "radar-chart-axis-labels", className: "pointer-events-none select-none", children: resolvedAxes.map((ra) => {
298
+ const text = ra.axis.label ?? ra.axis.id;
299
+ const dx = Math.sin(ra.angle);
300
+ const dy = -Math.cos(ra.angle);
301
+ const labelOffset = 12;
302
+ const lx = ra.tipX + dx * labelOffset;
303
+ const ly = ra.tipY + dy * labelOffset;
304
+ // Anchor the label so it doesn't overrun the axis tip.
305
+ const textAnchor = dx > 0.15 ? "start" : dx < -0.15 ? "end" : "middle";
306
+ const dominantBaseline = dy > 0.15 ? "auto" : dy < -0.15 ? "hanging" : "middle";
307
+ return (_jsx("text", { x: lx, y: ly, textAnchor: textAnchor, dominantBaseline: dominantBaseline, className: cn("fill-muted-foreground", axisLabelClassName), children: text }, `label-${ra.axis.id}`));
308
+ }) })) : null] }))] }), children ? (_jsx("div", { className: cn("pointer-events-none absolute inset-0 flex items-center justify-center text-center", overlayClassName), children: children })) : null] }));
309
+ }
310
+ RadarChart.displayName = "RadarChart";
311
+ export { RadarChart };
312
+ //# sourceMappingURL=radar-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radar-chart.js","sourceRoot":"","sources":["../../../../src/components/ui/radar-chart/radar-chart.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schemavaults/ui",
3
- "version": "0.82.0",
3
+ "version": "0.84.0",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "description": "React.js UI components for SchemaVaults frontend applications",