@spear-ai/spectral 1.11.2 → 1.12.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/README.md +4 -0
- package/dist/.js +124 -121
- package/dist/{Accordion-CDXdSAST.js → Accordion-Cyrb2byI.js} +1 -1
- package/dist/Accordion.js +1 -1
- package/dist/Alert/AlertBase.js +1 -1
- package/dist/Alert.js +3 -3
- package/dist/{AnimatePresence-D-9jXfgI.js → AnimatePresence-D9FLxIGV.js} +1 -1
- package/dist/Avatar.js +46 -48
- package/dist/Badge.js +1 -1
- package/dist/Button.js +1 -1
- package/dist/ButtonGroup/ButtonGroupButton.js +1 -1
- package/dist/ButtonGroup.js +1 -1
- package/dist/ButtonIcon.js +1 -1
- package/dist/{Calendar-s4lyijkn.js → Calendar-Cnh_PTbQ.js} +4 -4
- package/dist/Checkbox/CheckboxBase.js +1 -1
- package/dist/Checkbox.d.ts +10 -3
- package/dist/Checkbox.js +55 -35
- package/dist/Combobox/ComboboxBase.js +1 -1
- package/dist/Combobox.d.ts +5 -3
- package/dist/Combobox.js +91 -92
- package/dist/{ComboboxBase-qX-mQhT6.js → ComboboxBase-BzDGK36x.js} +1 -1
- package/dist/ControlGroup/ControlGroupSelect.d.ts +5 -2
- package/dist/ControlGroup/ControlGroupSelect.js +33 -30
- package/dist/ControlGroup.d.ts +3 -2
- package/dist/ControlGroup.js +41 -33
- package/dist/DataCard/Card.js +1 -1
- package/dist/DataCard.js +1 -1
- package/dist/DateTimePicker/Calendar.js +1 -1
- package/dist/DateTimePicker/DateTimeDisplayInput.js +84 -83
- package/dist/DateTimePicker/DateTimeInput.js +2 -2
- package/dist/DateTimePicker/DateTimeUtils.js +1 -1
- package/dist/DateTimePicker/TimePeriodSelect.js +32 -35
- package/dist/DateTimePicker/TimePicker.js +2 -2
- package/dist/DateTimePicker.d.ts +1 -1
- package/dist/DateTimePicker.js +55 -52
- package/dist/{DateTimeUtils-DVvG6H-p.js → DateTimeUtils-BJUAMuot.js} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/DropdownMenu.d.ts +61 -0
- package/dist/DropdownMenu.js +869 -0
- package/dist/{HoverCard-CYDsIiVK.js → HoverCard-DERasp0v.js} +1 -1
- package/dist/HoverCard.js +1 -1
- package/dist/Icons/AdjustmentsIcon.d.ts +5 -0
- package/dist/Icons/AdjustmentsIcon.js +78 -0
- package/dist/Icons/MenuDotsIcon.d.ts +5 -0
- package/dist/Icons/MenuDotsIcon.js +36 -0
- package/dist/Icons/MenuIcon.d.ts +5 -0
- package/dist/Icons/MenuIcon.js +36 -0
- package/dist/Icons/index.d.ts +3 -0
- package/dist/Icons.js +81 -78
- package/dist/IconsAnimated/PanelLeftCloseIcon.js +3 -3
- package/dist/IconsAnimated/PanelLeftOpenIcon.js +3 -3
- package/dist/Input.js +1 -1
- package/dist/InputNumeric.js +1 -1
- package/dist/{InputOTP-cVn5Bzyp.js → InputOTP-BkSw_KIB.js} +12 -10
- package/dist/InputOTP.js +1 -1
- package/dist/Kbd.js +1 -1
- package/dist/Label.js +1 -1
- package/dist/MultiSelect/MultiSelectBase.d.ts +6 -4
- package/dist/MultiSelect/MultiSelectBase.js +235 -209
- package/dist/MultiSelect.d.ts +2 -1
- package/dist/MultiSelect.js +14 -12
- package/dist/Popover.js +1 -1
- package/dist/RadioButton.js +1 -1
- package/dist/RadioButtonGroup/RadioButtonGroupBase.js +1 -1
- package/dist/RadioButtonGroup.js +1 -1
- package/dist/RadioGroup-DqKggFnI.js +328 -0
- package/dist/RadioGroup.d.ts +7 -0
- package/dist/RadioGroup.js +1 -1
- package/dist/Select.d.ts +5 -2
- package/dist/Select.js +100 -85
- package/dist/Separator.js +1 -1
- package/dist/Skeleton.js +1 -1
- package/dist/{Slider-BzzZT3Zm.js → Slider-CfUFkWU4.js} +1 -1
- package/dist/Slider.js +1 -1
- package/dist/Switch-Wj_zov--.js +144 -0
- package/dist/Switch.d.ts +12 -3
- package/dist/Switch.js +1 -1
- package/dist/Tabs/TabsBase.js +4 -4
- package/dist/Tabs.js +1 -1
- package/dist/Textarea.d.ts +3 -2
- package/dist/Textarea.js +50 -45
- package/dist/{Toast-9zqXxKKO.js → Toast-CJvzLlMD.js} +1 -1
- package/dist/Toast.js +1 -1
- package/dist/Toggle.js +1 -1
- package/dist/ToggleGroup.js +1 -1
- package/dist/{Tooltip-D1K8kY1y.js → Tooltip-BR0tdif4.js} +2 -2
- package/dist/Tooltip.js +1 -1
- package/dist/Tray.js +4 -4
- package/dist/{chunk-h9knIhTc.js → chunk-C4rFPcKS.js} +1 -1
- package/dist/dist-DcUGLq_y.js +149 -0
- package/dist/main.js +1 -1
- package/dist/primitives/button.js +1 -1
- package/dist/primitives/input-group.js +1 -1
- package/dist/primitives/input.js +1 -1
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/select.d.ts.map +1 -1
- package/dist/primitives/select.js +56 -53
- package/dist/primitives/textarea.js +1 -1
- package/dist/{proxy-Dn10Pl_g.js → proxy-CCB7C4Pu.js} +10 -10
- package/dist/styles/spectral.css +1 -1
- package/dist/{twUtils-VNWgstKL.js → twUtils-D_qzdiwM.js} +1 -1
- package/dist/{use-animation-CBUDycyW.js → use-animation-C-qL83hj.js} +1 -1
- package/dist/utils/dropdownPositioning.d.ts +13 -0
- package/dist/utils/dropdownPositioning.d.ts.map +1 -0
- package/dist/utils/dropdownPositioning.js +43 -0
- package/dist/utils/dropdownPositioning.test.d.ts +2 -0
- package/dist/utils/dropdownPositioning.test.d.ts.map +1 -0
- package/dist/utils/dropdownPositioning.test.js +21 -0
- package/dist/utils/formFieldUtils.d.ts +15 -1
- package/dist/utils/formFieldUtils.d.ts.map +1 -1
- package/dist/utils/formFieldUtils.js +35 -19
- package/dist/utils/twUtils.js +1 -1
- package/package.json +26 -22
- package/dist/RadioGroup-w_q6RGEK.js +0 -447
- package/dist/Switch-CVzRJ-0n.js +0 -126
- /package/dist/{dist-B4FgboI8.js → dist-Cujfuel1.js} +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback as e, useEffect as t, useMemo as n, useState as r } from "react";
|
|
3
|
+
//#region src/utils/dropdownPositioning.ts
|
|
4
|
+
var i = 12, a = (e, t, n = i) => {
|
|
5
|
+
let r = n, a = t - n, o = e.right - a;
|
|
6
|
+
if (o > 0) return -o;
|
|
7
|
+
let s = r - e.left;
|
|
8
|
+
return s > 0 ? s : 0;
|
|
9
|
+
}, o = (i = !0) => {
|
|
10
|
+
let [o, s] = r(null), [c, l] = r(0), u = e(() => {
|
|
11
|
+
if (!i || !o) {
|
|
12
|
+
l(0);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let e = a(o.getBoundingClientRect(), window.innerWidth);
|
|
16
|
+
l((t) => Math.abs(t - e) < .5 ? t : e);
|
|
17
|
+
}, [o, i]);
|
|
18
|
+
return t(() => {
|
|
19
|
+
if (!i || !o) return;
|
|
20
|
+
let e = requestAnimationFrame(() => {
|
|
21
|
+
u();
|
|
22
|
+
}), t = () => {
|
|
23
|
+
u();
|
|
24
|
+
};
|
|
25
|
+
window.addEventListener("resize", t), window.addEventListener("scroll", t, !0);
|
|
26
|
+
let n = null;
|
|
27
|
+
return typeof ResizeObserver < "u" && (n = new ResizeObserver(() => {
|
|
28
|
+
u();
|
|
29
|
+
}), n.observe(o)), () => {
|
|
30
|
+
cancelAnimationFrame(e), window.removeEventListener("resize", t), window.removeEventListener("scroll", t, !0), n?.disconnect();
|
|
31
|
+
};
|
|
32
|
+
}, [
|
|
33
|
+
o,
|
|
34
|
+
i,
|
|
35
|
+
u
|
|
36
|
+
]), {
|
|
37
|
+
dropdownShiftStyle: n(() => c === 0 ? null : { marginLeft: `${c}px` }, [c]),
|
|
38
|
+
recalculateDropdownPosition: u,
|
|
39
|
+
setDropdownElement: s
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { a as getDropdownHorizontalShift, o as useAutoDropdownHorizontalShift };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdownPositioning.test.d.ts","sourceRoot":"","sources":["../../src/utils/dropdownPositioning.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getDropdownHorizontalShift as e } from "./dropdownPositioning.js";
|
|
2
|
+
//#region src/utils/dropdownPositioning.test.ts
|
|
3
|
+
describe("getDropdownHorizontalShift", () => {
|
|
4
|
+
it("returns zero when dropdown fits viewport", () => {
|
|
5
|
+
expect(e({
|
|
6
|
+
left: 100,
|
|
7
|
+
right: 500
|
|
8
|
+
}, 1200)).toBe(0);
|
|
9
|
+
}), it("returns negative shift when right edge overflows", () => {
|
|
10
|
+
expect(e({
|
|
11
|
+
left: 700,
|
|
12
|
+
right: 1220
|
|
13
|
+
}, 1200)).toBe(-32);
|
|
14
|
+
}), it("returns positive shift when left edge overflows", () => {
|
|
15
|
+
expect(e({
|
|
16
|
+
left: -10,
|
|
17
|
+
right: 300
|
|
18
|
+
}, 1200)).toBe(22);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { KeyboardEvent, ReactNode } from 'react';
|
|
1
|
+
import { CSSProperties, KeyboardEvent, ReactNode } from 'react';
|
|
2
2
|
export type FormFieldState = 'default' | 'error' | 'warning' | 'disabled' | 'loading' | 'success';
|
|
3
3
|
export interface BaseFormFieldProps {
|
|
4
4
|
disabled?: boolean;
|
|
@@ -22,6 +22,19 @@ export interface BaseOption {
|
|
|
22
22
|
value: string;
|
|
23
23
|
}
|
|
24
24
|
export type DropdownWidth = 'trigger' | 'content' | (string & {});
|
|
25
|
+
export type DropdownWidthMode = 'trigger' | 'content' | 'custom';
|
|
26
|
+
interface DropdownWidthStyleConfig {
|
|
27
|
+
dropdownWidth: DropdownWidth;
|
|
28
|
+
triggerStyleWidth?: string;
|
|
29
|
+
triggerWidth: string;
|
|
30
|
+
viewportMaxWidth?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare const getDropdownWidthStyles: ({ dropdownWidth, triggerStyleWidth, triggerWidth, viewportMaxWidth, }: DropdownWidthStyleConfig) => {
|
|
33
|
+
dropdownOverflowStyle: CSSProperties;
|
|
34
|
+
dropdownWidthMode: DropdownWidthMode;
|
|
35
|
+
dropdownWidthStyle: CSSProperties;
|
|
36
|
+
resolvedDropdownWidth: string;
|
|
37
|
+
};
|
|
25
38
|
export declare const getStateClasses: (state: FormFieldState) => string;
|
|
26
39
|
export declare const getTriggerClasses: (isOpen: boolean | undefined, state: FormFieldState, className?: string) => string;
|
|
27
40
|
export declare const getDropdownClasses: (isOpen: boolean, position?: "top" | "bottom") => string;
|
|
@@ -79,4 +92,5 @@ export declare const WarningMessage: ({ className, id, dataTestId, message }: {
|
|
|
79
92
|
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
80
93
|
export declare const getOptionClasses: (isDisabled: boolean | undefined, isFocused: boolean, isSelected: boolean) => string;
|
|
81
94
|
export declare const scrollIntoView: (element: HTMLElement | null) => void;
|
|
95
|
+
export {};
|
|
82
96
|
//# sourceMappingURL=formFieldUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formFieldUtils.d.ts","sourceRoot":"","sources":["../../src/utils/formFieldUtils.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAmD,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"formFieldUtils.d.ts","sourceRoot":"","sources":["../../src/utils/formFieldUtils.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,53 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "../twUtils-
|
|
2
|
+
import { t as e } from "../twUtils-D_qzdiwM.js";
|
|
3
3
|
import { useCallback as t, useEffect as n, useId as r, useRef as i, useState as a } from "react";
|
|
4
4
|
import { jsx as o } from "react/jsx-runtime";
|
|
5
5
|
//#region src/utils/formFieldUtils.tsx
|
|
6
|
-
var s = (e) =>
|
|
6
|
+
var s = ({ dropdownWidth: e, triggerStyleWidth: t, triggerWidth: n, viewportMaxWidth: r = "calc(100vw - 2rem)" }) => {
|
|
7
|
+
let i = e === "trigger" ? "trigger" : e === "content" ? "content" : "custom", a = e === "trigger" ? n : e === "content" ? "max-content" : e, o = {
|
|
8
|
+
maxWidth: r,
|
|
9
|
+
overflowX: "auto",
|
|
10
|
+
overflowY: "auto"
|
|
11
|
+
};
|
|
12
|
+
return {
|
|
13
|
+
dropdownOverflowStyle: o,
|
|
14
|
+
dropdownWidthMode: i,
|
|
15
|
+
dropdownWidthStyle: e === "trigger" ? { width: t ?? n } : {
|
|
16
|
+
width: a,
|
|
17
|
+
...e === "content" ? { minWidth: "max-content" } : {},
|
|
18
|
+
...o
|
|
19
|
+
},
|
|
20
|
+
resolvedDropdownWidth: a
|
|
21
|
+
};
|
|
22
|
+
}, c = (e) => ({
|
|
7
23
|
success: "border-success-400 hover:border-success-500 focus-visible:border-success-400 focus-visible:outline-success-400",
|
|
8
24
|
error: "border-danger-400 hover:border-danger-500 focus-visible:border-danger-400 focus-visible:outline-danger-400",
|
|
9
25
|
warning: "border-warning-400 hover:border-warning-400 focus-visible:border-warning-400 focus-visible:outline-warning-400",
|
|
10
26
|
loading: "cursor-wait border-input-border--disabled pointer-events-none",
|
|
11
27
|
disabled: "cursor-not-allowed opacity-50 border-input-border--disabled text-input-text--disabled",
|
|
12
28
|
default: ""
|
|
13
|
-
})[e],
|
|
29
|
+
})[e], l = (t = !1, n, r) => e("h-12 rounded-lg px-4 text-base flex w-full items-center justify-between border-2 border-input-border bg-input-bg", "text-input-text transition duration-200 hover:border-input-border--hover focus:border-input-border--focus focus:outline-none", "focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-input-border--focus", "disabled:cursor-not-allowed disabled:border-input-border--disabled disabled:bg-input-bg--disabled disabled:opacity-50", t && "border-input-border--focus outline outline-2 outline-offset-2 outline-input-border--focus", c(n), r), u = (t, n = "bottom") => {
|
|
14
30
|
let r = n === "bottom" ? "top-full mt-1 origin-top" : "bottom-full mb-1 origin-bottom", i = n === "bottom" ? t ? "scale-100 opacity-100 translate-y-0" : "scale-95 opacity-0 -translate-y-1 pointer-events-none" : t ? "scale-100 opacity-100 translate-y-0" : "scale-95 opacity-0 translate-y-1 pointer-events-none";
|
|
15
|
-
return e("left-0 right-0 absolute z-50",
|
|
16
|
-
},
|
|
31
|
+
return e("left-0 right-0 absolute z-50", d(), "transition-[opacity,transform] duration-150 motion-reduce:transform-none motion-reduce:transition-none", "will-change-[opacity,transform]", r, i);
|
|
32
|
+
}, d = () => "rounded-lg border border-input-border bg-input-bg shadow-md", f = (t, n) => e("peer h-12 rounded-md ps-3 pe-12 text-base flex w-full border-2 border-input-border bg-input-bg transition duration-200", "placeholder:text-input-text-placeholder hover:border-input-border--hover focus:border-input-border--focus focus:outline-none", "focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-input-border--focus", "disabled:pointer-events-none disabled:border-input-border--disabled disabled:bg-input-bg--disabled disabled:text-input-text--disabled", c(t), n), p = (t, n) => e("peer h-24 rounded-md p-3 text-base flex w-full resize-none border-2 border-input-border bg-input-bg transition duration-200", "placeholder:text-input-text-placeholder hover:border-input-border--hover focus:border-input-border--focus focus:outline-none", "focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-input-border--focus", "disabled:pointer-events-none disabled:border-input-border--disabled disabled:bg-input-bg--disabled disabled:text-input-text--disabled", c(t), n), m = (e, t) => {
|
|
17
33
|
let n = r();
|
|
18
34
|
if (e) return e;
|
|
19
35
|
let i = t?.trim().toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9\-_.:]/g, "");
|
|
20
36
|
return i ? `${i}-${n}` : n;
|
|
21
|
-
},
|
|
37
|
+
}, h = (e) => `${e}-error`, g = (t, n, r, i) => ({
|
|
22
38
|
"aria-invalid": t === "error",
|
|
23
39
|
"aria-required": r,
|
|
24
40
|
"aria-describedby": e((t === "error" || t === "warning") && i, n) || void 0
|
|
25
|
-
}),
|
|
41
|
+
}), _ = (e = {}) => ({
|
|
26
42
|
"--field-border-radius": "0.5rem",
|
|
27
43
|
"--field-height": "3rem",
|
|
28
44
|
"--field-padding": "1rem",
|
|
29
45
|
...e
|
|
30
|
-
}),
|
|
46
|
+
}), v = (e, t = "default") => ({
|
|
31
47
|
isDisabled: e ?? t === "disabled",
|
|
32
48
|
isLoading: t === "loading",
|
|
33
49
|
isInvalid: t === "error"
|
|
34
|
-
}),
|
|
50
|
+
}), y = (e) => {
|
|
35
51
|
let t = i(null);
|
|
36
52
|
return n(() => {
|
|
37
53
|
let n = (n) => {
|
|
@@ -39,7 +55,7 @@ var s = (e) => ({
|
|
|
39
55
|
};
|
|
40
56
|
return document.addEventListener("mousedown", n), () => document.removeEventListener("mousedown", n);
|
|
41
57
|
}, [e]), t;
|
|
42
|
-
},
|
|
58
|
+
}, b = (e, r = !1, i, o, s, c) => {
|
|
43
59
|
let [l, u] = a(-1);
|
|
44
60
|
n(() => {
|
|
45
61
|
if (e) if (r) u(0);
|
|
@@ -103,7 +119,7 @@ var s = (e) => ({
|
|
|
103
119
|
]),
|
|
104
120
|
isOpen: e
|
|
105
121
|
};
|
|
106
|
-
},
|
|
122
|
+
}, x = (e) => {
|
|
107
123
|
let t = {}, n = [];
|
|
108
124
|
return e.forEach((e) => {
|
|
109
125
|
e.group ? (t[e.group] || (t[e.group] = []), t[e.group].push(e)) : n.push(e);
|
|
@@ -112,17 +128,17 @@ var s = (e) => ({
|
|
|
112
128
|
ungrouped: n,
|
|
113
129
|
hasGroups: Object.keys(t).length > 0
|
|
114
130
|
};
|
|
115
|
-
},
|
|
131
|
+
}, S = ({ className: t, message: n = "Loading…" }) => /* @__PURE__ */ o("div", {
|
|
116
132
|
"aria-live": "polite",
|
|
117
133
|
className: e("gap-2 py-6 text-base text-input-text-secondary flex items-center justify-center", t),
|
|
118
134
|
role: "status",
|
|
119
135
|
children: n
|
|
120
|
-
}),
|
|
136
|
+
}), C = ({ className: t, message: n = "No options found" }) => /* @__PURE__ */ o("div", {
|
|
121
137
|
className: e("py-6 text-base text-center text-text-secondary", t),
|
|
122
138
|
role: "status",
|
|
123
139
|
children: n
|
|
124
|
-
}),
|
|
125
|
-
let a =
|
|
140
|
+
}), w = (e) => e ? typeof e == "string" ? e : Array.isArray(e) ? e.join(", ") : typeof e == "object" ? e.message ? e.message : e.error ? e.error : e.details ? e.details : JSON.stringify(e) : String(e) : null, T = ({ className: t, id: n, dataTestId: r, message: i }) => {
|
|
141
|
+
let a = w(i);
|
|
126
142
|
return a ? /* @__PURE__ */ o("p", {
|
|
127
143
|
"aria-atomic": "true",
|
|
128
144
|
"aria-live": "assertive",
|
|
@@ -132,8 +148,8 @@ var s = (e) => ({
|
|
|
132
148
|
role: "alert",
|
|
133
149
|
children: a
|
|
134
150
|
}) : null;
|
|
135
|
-
},
|
|
136
|
-
let a =
|
|
151
|
+
}, E = ({ className: t, id: n, dataTestId: r, message: i }) => {
|
|
152
|
+
let a = w(i);
|
|
137
153
|
return a ? /* @__PURE__ */ o("p", {
|
|
138
154
|
"aria-atomic": "true",
|
|
139
155
|
"aria-live": "polite",
|
|
@@ -143,11 +159,11 @@ var s = (e) => ({
|
|
|
143
159
|
role: "status",
|
|
144
160
|
children: a
|
|
145
161
|
}) : null;
|
|
146
|
-
},
|
|
162
|
+
}, D = (t = !1, n, r) => e("rounded-sm py-1.5 pl-2 pr-8 text-base relative flex w-full cursor-pointer items-center outline-none select-none hover:bg-input-bg--hover", n && "bg-input-bg--hover", r && "bg-input-bg--selected text-input-text", t && "pointer-events-none text-input-text--disabled"), O = (e) => {
|
|
147
163
|
e && e.scrollIntoView({
|
|
148
164
|
block: "nearest",
|
|
149
165
|
behavior: "smooth"
|
|
150
166
|
});
|
|
151
167
|
};
|
|
152
168
|
//#endregion
|
|
153
|
-
export {
|
|
169
|
+
export { C as EmptyState, T as ErrorMessage, S as LoadingState, E as WarningMessage, g as getAriaProps, u as getDropdownClasses, d as getDropdownSurfaceClasses, s as getDropdownWidthStyles, h as getErrorMessageId, _ as getFormFieldCSSProperties, f as getInputClasses, D as getOptionClasses, c as getStateClasses, p as getTextareaClasses, l as getTriggerClasses, x as groupOptions, O as scrollIntoView, y as useClickOutside, m as useFormFieldId, v as useFormFieldState, b as useKeyboardNavigation };
|
package/dist/utils/twUtils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../twUtils-
|
|
1
|
+
import { t as e } from "../twUtils-D_qzdiwM.js";
|
|
2
2
|
export { e as cn };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spear-ai/spectral",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"repository": {
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"@radix-ui/react-accordion": "^1.2.12",
|
|
54
54
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
55
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
55
56
|
"@radix-ui/react-hover-card": "^1.1.15",
|
|
56
57
|
"@radix-ui/react-popover": "^1.1.15",
|
|
57
58
|
"@radix-ui/react-radio-group": "^1.3.8",
|
|
@@ -68,7 +69,7 @@
|
|
|
68
69
|
"motion": "^12.38.0",
|
|
69
70
|
"react-day-picker": "^9.14.0",
|
|
70
71
|
"react-remove-scroll": "^2.7.2",
|
|
71
|
-
"react-router": "^7.
|
|
72
|
+
"react-router": "^7.14.2",
|
|
72
73
|
"react-use-measure": "^2.1.7",
|
|
73
74
|
"sonner": "^2.0.7",
|
|
74
75
|
"tailwind-merge": "^3.5.0",
|
|
@@ -78,45 +79,45 @@
|
|
|
78
79
|
"zod": "^4.3.6"
|
|
79
80
|
},
|
|
80
81
|
"devDependencies": {
|
|
81
|
-
"@changesets/cli": "^2.
|
|
82
|
+
"@changesets/cli": "^2.31.0",
|
|
82
83
|
"@chromatic-com/storybook": "^4.1.3",
|
|
83
84
|
"@github-ui/storybook-addon-performance-panel": "^1.1.4",
|
|
84
|
-
"@sentry/react": "^10.
|
|
85
|
+
"@sentry/react": "^10.50.0",
|
|
85
86
|
"@sentry/vite-plugin": "^4.9.1",
|
|
86
|
-
"@storybook/addon-docs": "^10.3.
|
|
87
|
-
"@storybook/addon-themes": "^10.3.
|
|
88
|
-
"@storybook/addon-vitest": "^10.3.
|
|
89
|
-
"@storybook/builder-vite": "^10.3.
|
|
90
|
-
"@storybook/react-vite": "^10.3.
|
|
91
|
-
"@tailwindcss/vite": "^4.2.
|
|
87
|
+
"@storybook/addon-docs": "^10.3.5",
|
|
88
|
+
"@storybook/addon-themes": "^10.3.5",
|
|
89
|
+
"@storybook/addon-vitest": "^10.3.5",
|
|
90
|
+
"@storybook/builder-vite": "^10.3.5",
|
|
91
|
+
"@storybook/react-vite": "^10.3.5",
|
|
92
|
+
"@tailwindcss/vite": "^4.2.4",
|
|
92
93
|
"@testing-library/jest-dom": "^6.9.1",
|
|
93
94
|
"@testing-library/react": "^16.3.2",
|
|
94
95
|
"@testing-library/user-event": "^14.6.1",
|
|
95
|
-
"@types/node": "^24.12.
|
|
96
|
+
"@types/node": "^24.12.2",
|
|
96
97
|
"@types/react": "^19.2.14",
|
|
97
98
|
"@types/react-dom": "^19.2.3",
|
|
98
99
|
"@vitejs/plugin-react": "^6.0.1",
|
|
99
|
-
"@vitest/browser": "^4.1.
|
|
100
|
-
"@vitest/browser-playwright": "^4.1.
|
|
101
|
-
"@vitest/coverage-v8": "^4.1.
|
|
102
|
-
"@vitest/ui": "^4.1.
|
|
100
|
+
"@vitest/browser": "^4.1.5",
|
|
101
|
+
"@vitest/browser-playwright": "^4.1.5",
|
|
102
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
103
|
+
"@vitest/ui": "^4.1.5",
|
|
103
104
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
104
105
|
"glob": "^13.0.6",
|
|
105
106
|
"http-server": "^14.1.1",
|
|
106
|
-
"
|
|
107
|
+
"oxfmt": "^0.43.0",
|
|
108
|
+
"oxlint": "^1.61.0",
|
|
107
109
|
"oxlint-tsgolint": "^0.11.5",
|
|
108
110
|
"playwright": "^1.58.2",
|
|
109
|
-
"
|
|
110
|
-
"storybook": "^10.2.14",
|
|
111
|
+
"storybook": "^10.3.5",
|
|
111
112
|
"stylelint": "^16.26.1",
|
|
112
113
|
"stylelint-config-standard": "^39.0.1",
|
|
113
|
-
"tailwindcss": "^4.2.
|
|
114
|
+
"tailwindcss": "^4.2.4",
|
|
114
115
|
"typescript": "^5.9.3",
|
|
115
|
-
"vite": "^8.0.
|
|
116
|
+
"vite": "^8.0.10",
|
|
116
117
|
"vite-bundle-visualizer": "^1.2.1",
|
|
117
118
|
"vite-plugin-dts": "^4.5.4",
|
|
118
|
-
"vitest": "^4.1.
|
|
119
|
-
"vitest-browser-react": "^2.
|
|
119
|
+
"vitest": "^4.1.5",
|
|
120
|
+
"vitest-browser-react": "^2.2.0"
|
|
120
121
|
},
|
|
121
122
|
"peerDependencies": {
|
|
122
123
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -151,10 +152,13 @@
|
|
|
151
152
|
"changeset": "changeset",
|
|
152
153
|
"changeset:version": "changeset version",
|
|
153
154
|
"changeset:publish": "changeset publish",
|
|
155
|
+
"changelog:generate": "node scripts/generate-storybook-changelog.js",
|
|
156
|
+
"release:version": "pnpm run changeset:version && pnpm run changelog:generate",
|
|
154
157
|
"clean": "rm -rf $(find dist -maxdepth 1 ! -name \"node_modules\") && rm pnpm-lock.yaml",
|
|
155
158
|
"clean:build-artifacts": "find .storybook -name '*.js' -not -name '*.config.js' -delete && find .storybook -name '*.d.ts' -delete && find . -name '*.d.ts' -path './vite.config.d.ts' -delete && rm -rf storybook-static",
|
|
156
159
|
"icons:update": "node scripts/update-icons-index.js",
|
|
157
160
|
"test": "vitest run",
|
|
161
|
+
"test:form-fields": "vitest run src/components/Select/Select.test.tsx src/components/Combobox/Combobox.test.tsx src/components/MultiSelect/MultiSelect.test.tsx src/components/Textarea/Textarea.test.tsx src/components/DateTimePicker/DateTimePicker.test.tsx src/components/InputOTP/InputOTP.test.tsx src/components/Checkbox/Checkbox.test.tsx src/components/Switch/Switch.test.tsx src/components/RadioGroup/RadioGroup.test.tsx src/components/ControlGroup/ControlGroupSelect.test.tsx",
|
|
158
162
|
"test:watch": "vitest",
|
|
159
163
|
"test:ui": "vitest --ui",
|
|
160
164
|
"test:coverage": "vitest run --coverage"
|