@schemavaults/ui 0.81.0 → 0.83.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.
- package/dist/components/ui/index.d.ts +4 -0
- package/dist/components/ui/index.js +2 -0
- package/dist/components/ui/index.js.map +1 -1
- package/dist/components/ui/radar-chart/index.d.ts +3 -0
- package/dist/components/ui/radar-chart/index.js +3 -0
- package/dist/components/ui/radar-chart/index.js.map +1 -0
- package/dist/components/ui/radar-chart/radar-chart.d.ts +146 -0
- package/dist/components/ui/radar-chart/radar-chart.js +312 -0
- package/dist/components/ui/radar-chart/radar-chart.js.map +1 -0
- package/dist/components/ui/split-button/index.d.ts +4 -0
- package/dist/components/ui/split-button/index.js +3 -0
- package/dist/components/ui/split-button/index.js.map +1 -0
- package/dist/components/ui/split-button/split-button-variants.d.ts +4 -0
- package/dist/components/ui/split-button/split-button-variants.js +13 -0
- package/dist/components/ui/split-button/split-button-variants.js.map +1 -0
- package/dist/components/ui/split-button/split-button.d.ts +60 -0
- package/dist/components/ui/split-button/split-button.js +60 -0
- package/dist/components/ui/split-button/split-button.js.map +1 -0
- package/package.json +1 -1
|
@@ -182,6 +182,8 @@ export * from "./bar-chart";
|
|
|
182
182
|
export type * from "./bar-chart";
|
|
183
183
|
export * from "./line-chart";
|
|
184
184
|
export type * from "./line-chart";
|
|
185
|
+
export * from "./radar-chart";
|
|
186
|
+
export type * from "./radar-chart";
|
|
185
187
|
export * from "./comparison-slider";
|
|
186
188
|
export type * from "./comparison-slider";
|
|
187
189
|
export * from "./theme-selector";
|
|
@@ -214,3 +216,5 @@ export * from "./terminal-frame";
|
|
|
214
216
|
export type * from "./terminal-frame";
|
|
215
217
|
export * from "./inline-edit";
|
|
216
218
|
export type * from "./inline-edit";
|
|
219
|
+
export * from "./split-button";
|
|
220
|
+
export type * from "./split-button";
|
|
@@ -90,6 +90,7 @@ export * from "./calendar-heatmap";
|
|
|
90
90
|
export * from "./pie-chart";
|
|
91
91
|
export * from "./bar-chart";
|
|
92
92
|
export * from "./line-chart";
|
|
93
|
+
export * from "./radar-chart";
|
|
93
94
|
export * from "./comparison-slider";
|
|
94
95
|
export * from "./theme-selector";
|
|
95
96
|
export * from "./tree-view";
|
|
@@ -106,4 +107,5 @@ export * from "./http-method-badge";
|
|
|
106
107
|
export * from "./browser-frame";
|
|
107
108
|
export * from "./terminal-frame";
|
|
108
109
|
export * from "./inline-edit";
|
|
110
|
+
export * from "./split-button";
|
|
109
111
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|
|
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,eAAe,CAAC;AAG9B,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"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { SplitButton, SplitButtonAction, SplitButtonTrigger, SplitButtonContent, splitButtonSizeIds, splitButtonVariantIds, } from "./split-button";
|
|
2
|
+
export type * from "./split-button";
|
|
3
|
+
export type * from "./split-button-variants";
|
|
4
|
+
export { SplitButton as default } from "./split-button";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/split-button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const splitButtonVariantIds: readonly ["default", "destructive", "outline", "secondary", "ghost"];
|
|
2
|
+
export type SplitButtonVariant = (typeof splitButtonVariantIds)[number];
|
|
3
|
+
export declare const splitButtonSizeIds: readonly ["sm", "default", "lg"];
|
|
4
|
+
export type SplitButtonSize = (typeof splitButtonSizeIds)[number];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-button-variants.js","sourceRoot":"","sources":["../../../../src/components/ui/split-button/split-button-variants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS;IACT,aAAa;IACb,SAAS;IACT,WAAW;IACX,OAAO;CAC6B,CAAC;AAGvC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI;IACJ,SAAS;IACT,IAAI;CACgC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type ButtonHTMLAttributes, type ComponentPropsWithoutRef, type HTMLAttributes, type ReactElement, type ReactNode, type Ref } from "react";
|
|
2
|
+
import { DropdownMenuContent } from "../dropdown-menu/dropdown-menu";
|
|
3
|
+
import { splitButtonSizeIds, splitButtonVariantIds, type SplitButtonSize, type SplitButtonVariant } from "./split-button-variants";
|
|
4
|
+
export interface SplitButtonProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
/** Visual style shared by both halves. Mirrors the Button variants. */
|
|
6
|
+
variant?: SplitButtonVariant;
|
|
7
|
+
/** Height/padding shared by both halves. */
|
|
8
|
+
size?: SplitButtonSize;
|
|
9
|
+
/** Disables both the primary action and the dropdown trigger. */
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
/** Controlled open state for the dropdown menu. */
|
|
12
|
+
open?: boolean;
|
|
13
|
+
/** Uncontrolled initial open state for the dropdown menu. */
|
|
14
|
+
defaultOpen?: boolean;
|
|
15
|
+
/** Fires when the dropdown opens or closes. */
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
/** Text direction forwarded to the underlying DropdownMenu.Root. */
|
|
18
|
+
dir?: "ltr" | "rtl";
|
|
19
|
+
/** Modal control forwarded to the underlying DropdownMenu.Root. */
|
|
20
|
+
modal?: boolean;
|
|
21
|
+
ref?: Ref<HTMLDivElement>;
|
|
22
|
+
}
|
|
23
|
+
declare function SplitButton({ variant, size, disabled, open, defaultOpen, onOpenChange, dir, modal, className, children, ref, ...props }: SplitButtonProps): ReactElement;
|
|
24
|
+
declare namespace SplitButton {
|
|
25
|
+
var displayName: string;
|
|
26
|
+
}
|
|
27
|
+
export interface SplitButtonActionProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
28
|
+
/** Override the container-provided variant just for the primary action. */
|
|
29
|
+
variant?: SplitButtonVariant;
|
|
30
|
+
/** Override the container-provided size just for the primary action. */
|
|
31
|
+
size?: SplitButtonSize;
|
|
32
|
+
}
|
|
33
|
+
declare function SplitButtonAction({ className, variant, size, disabled, type, ...props }: SplitButtonActionProps): ReactElement;
|
|
34
|
+
declare namespace SplitButtonAction {
|
|
35
|
+
var displayName: string;
|
|
36
|
+
}
|
|
37
|
+
export interface SplitButtonTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
|
|
38
|
+
/** Override the container-provided variant just for the trigger. */
|
|
39
|
+
variant?: SplitButtonVariant;
|
|
40
|
+
/** Override the container-provided size just for the trigger. */
|
|
41
|
+
size?: SplitButtonSize;
|
|
42
|
+
/** Optional replacement for the default chevron icon. */
|
|
43
|
+
icon?: ReactNode;
|
|
44
|
+
/**
|
|
45
|
+
* Accessible label for the icon-only trigger. Defaults to
|
|
46
|
+
* "Show more actions".
|
|
47
|
+
*/
|
|
48
|
+
"aria-label"?: string;
|
|
49
|
+
}
|
|
50
|
+
declare function SplitButtonTrigger({ className, variant, size, disabled, icon, type, "aria-label": ariaLabel, ...props }: SplitButtonTriggerProps): ReactElement;
|
|
51
|
+
declare namespace SplitButtonTrigger {
|
|
52
|
+
var displayName: string;
|
|
53
|
+
}
|
|
54
|
+
export type SplitButtonContentProps = ComponentPropsWithoutRef<typeof DropdownMenuContent>;
|
|
55
|
+
declare function SplitButtonContent({ align, sideOffset, className, ...props }: SplitButtonContentProps): ReactElement;
|
|
56
|
+
declare namespace SplitButtonContent {
|
|
57
|
+
var displayName: string;
|
|
58
|
+
}
|
|
59
|
+
export { SplitButton, SplitButtonAction, SplitButtonTrigger, SplitButtonContent, splitButtonSizeIds, splitButtonVariantIds, };
|
|
60
|
+
export type { SplitButtonSize, SplitButtonVariant };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
4
|
+
import { ChevronDown } from "lucide-react";
|
|
5
|
+
import { createContext, useContext, } from "react";
|
|
6
|
+
import { cn } from "../../../lib/utils";
|
|
7
|
+
import { Button } from "../button/button";
|
|
8
|
+
import { DropdownMenuContent } from "../dropdown-menu/dropdown-menu";
|
|
9
|
+
import { splitButtonSizeIds, splitButtonVariantIds, } from "./split-button-variants";
|
|
10
|
+
const SplitButtonContext = createContext(null);
|
|
11
|
+
function useSplitButtonContext(componentName) {
|
|
12
|
+
const ctx = useContext(SplitButtonContext);
|
|
13
|
+
if (ctx === null) {
|
|
14
|
+
throw new Error(`<${componentName}> must be rendered inside a <SplitButton> parent.`);
|
|
15
|
+
}
|
|
16
|
+
return ctx;
|
|
17
|
+
}
|
|
18
|
+
const dividerClassByVariant = {
|
|
19
|
+
default: "border-l border-primary-foreground/25",
|
|
20
|
+
destructive: "border-l border-destructive-foreground/25",
|
|
21
|
+
outline: "border-l border-input",
|
|
22
|
+
secondary: "border-l border-secondary-foreground/20",
|
|
23
|
+
ghost: "border-l border-border",
|
|
24
|
+
};
|
|
25
|
+
const triggerSizeClass = {
|
|
26
|
+
sm: "h-9 w-8 px-0",
|
|
27
|
+
default: "h-10 w-10 px-0",
|
|
28
|
+
lg: "h-11 w-11 px-0",
|
|
29
|
+
};
|
|
30
|
+
const triggerIconSizeClass = {
|
|
31
|
+
sm: "h-3.5 w-3.5",
|
|
32
|
+
default: "h-4 w-4",
|
|
33
|
+
lg: "h-5 w-5",
|
|
34
|
+
};
|
|
35
|
+
function SplitButton({ variant = "default", size = "default", disabled = false, open, defaultOpen, onOpenChange, dir, modal, className, children, ref, ...props }) {
|
|
36
|
+
return (_jsx(SplitButtonContext.Provider, { value: { variant, size, disabled }, children: _jsx(DropdownMenuPrimitive.Root, { open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, dir: dir, modal: modal, children: _jsx("div", { ref: ref, "data-slot": "split-button", "data-variant": variant, "data-size": size, "data-disabled": disabled ? "true" : "false", className: cn("inline-flex items-stretch", className), ...props, children: children }) }) }));
|
|
37
|
+
}
|
|
38
|
+
SplitButton.displayName = "SplitButton";
|
|
39
|
+
function SplitButtonAction({ className, variant, size, disabled, type = "button", ...props }) {
|
|
40
|
+
const ctx = useSplitButtonContext("SplitButtonAction");
|
|
41
|
+
const resolvedVariant = variant ?? ctx.variant;
|
|
42
|
+
const resolvedSize = size ?? ctx.size;
|
|
43
|
+
const resolvedDisabled = disabled ?? ctx.disabled;
|
|
44
|
+
return (_jsx(Button, { type: type, variant: resolvedVariant, size: resolvedSize, disabled: resolvedDisabled, "data-slot": "split-button-action", className: cn("rounded-r-none border-r-0 focus-visible:z-10", className), ...props }));
|
|
45
|
+
}
|
|
46
|
+
SplitButtonAction.displayName = "SplitButtonAction";
|
|
47
|
+
function SplitButtonTrigger({ className, variant, size, disabled, icon, type = "button", "aria-label": ariaLabel = "Show more actions", ...props }) {
|
|
48
|
+
const ctx = useSplitButtonContext("SplitButtonTrigger");
|
|
49
|
+
const resolvedVariant = variant ?? ctx.variant;
|
|
50
|
+
const resolvedSize = size ?? ctx.size;
|
|
51
|
+
const resolvedDisabled = disabled ?? ctx.disabled;
|
|
52
|
+
return (_jsx(DropdownMenuPrimitive.Trigger, { asChild: true, disabled: resolvedDisabled, children: _jsx(Button, { type: type, variant: resolvedVariant, size: resolvedSize, disabled: resolvedDisabled, "aria-label": ariaLabel, "aria-haspopup": "menu", "data-slot": "split-button-trigger", className: cn("rounded-l-none focus-visible:z-10 data-[state=open]:bg-accent/60", triggerSizeClass[resolvedSize], dividerClassByVariant[resolvedVariant], className), ...props, children: icon ?? (_jsx(ChevronDown, { "aria-hidden": "true", className: cn("transition-transform duration-150 data-[state=open]:rotate-180", triggerIconSizeClass[resolvedSize]) })) }) }));
|
|
53
|
+
}
|
|
54
|
+
SplitButtonTrigger.displayName = "SplitButtonTrigger";
|
|
55
|
+
function SplitButtonContent({ align = "end", sideOffset = 4, className, ...props }) {
|
|
56
|
+
return (_jsx(DropdownMenuContent, { align: align, sideOffset: sideOffset, "data-slot": "split-button-content", className: cn("min-w-[10rem]", className), ...props }));
|
|
57
|
+
}
|
|
58
|
+
SplitButtonContent.displayName = "SplitButtonContent";
|
|
59
|
+
export { SplitButton, SplitButtonAction, SplitButtonTrigger, SplitButtonContent, splitButtonSizeIds, splitButtonVariantIds, };
|
|
60
|
+
//# sourceMappingURL=split-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-button.js","sourceRoot":"","sources":["../../../../src/components/ui/split-button/split-button.tsx"],"names":[],"mappings":"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"}
|