@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.
Files changed (116) hide show
  1. package/README.md +4 -0
  2. package/dist/.js +124 -121
  3. package/dist/{Accordion-CDXdSAST.js → Accordion-Cyrb2byI.js} +1 -1
  4. package/dist/Accordion.js +1 -1
  5. package/dist/Alert/AlertBase.js +1 -1
  6. package/dist/Alert.js +3 -3
  7. package/dist/{AnimatePresence-D-9jXfgI.js → AnimatePresence-D9FLxIGV.js} +1 -1
  8. package/dist/Avatar.js +46 -48
  9. package/dist/Badge.js +1 -1
  10. package/dist/Button.js +1 -1
  11. package/dist/ButtonGroup/ButtonGroupButton.js +1 -1
  12. package/dist/ButtonGroup.js +1 -1
  13. package/dist/ButtonIcon.js +1 -1
  14. package/dist/{Calendar-s4lyijkn.js → Calendar-Cnh_PTbQ.js} +4 -4
  15. package/dist/Checkbox/CheckboxBase.js +1 -1
  16. package/dist/Checkbox.d.ts +10 -3
  17. package/dist/Checkbox.js +55 -35
  18. package/dist/Combobox/ComboboxBase.js +1 -1
  19. package/dist/Combobox.d.ts +5 -3
  20. package/dist/Combobox.js +91 -92
  21. package/dist/{ComboboxBase-qX-mQhT6.js → ComboboxBase-BzDGK36x.js} +1 -1
  22. package/dist/ControlGroup/ControlGroupSelect.d.ts +5 -2
  23. package/dist/ControlGroup/ControlGroupSelect.js +33 -30
  24. package/dist/ControlGroup.d.ts +3 -2
  25. package/dist/ControlGroup.js +41 -33
  26. package/dist/DataCard/Card.js +1 -1
  27. package/dist/DataCard.js +1 -1
  28. package/dist/DateTimePicker/Calendar.js +1 -1
  29. package/dist/DateTimePicker/DateTimeDisplayInput.js +84 -83
  30. package/dist/DateTimePicker/DateTimeInput.js +2 -2
  31. package/dist/DateTimePicker/DateTimeUtils.js +1 -1
  32. package/dist/DateTimePicker/TimePeriodSelect.js +32 -35
  33. package/dist/DateTimePicker/TimePicker.js +2 -2
  34. package/dist/DateTimePicker.d.ts +1 -1
  35. package/dist/DateTimePicker.js +55 -52
  36. package/dist/{DateTimeUtils-DVvG6H-p.js → DateTimeUtils-BJUAMuot.js} +1 -1
  37. package/dist/Dialog.js +1 -1
  38. package/dist/DropdownMenu.d.ts +61 -0
  39. package/dist/DropdownMenu.js +869 -0
  40. package/dist/{HoverCard-CYDsIiVK.js → HoverCard-DERasp0v.js} +1 -1
  41. package/dist/HoverCard.js +1 -1
  42. package/dist/Icons/AdjustmentsIcon.d.ts +5 -0
  43. package/dist/Icons/AdjustmentsIcon.js +78 -0
  44. package/dist/Icons/MenuDotsIcon.d.ts +5 -0
  45. package/dist/Icons/MenuDotsIcon.js +36 -0
  46. package/dist/Icons/MenuIcon.d.ts +5 -0
  47. package/dist/Icons/MenuIcon.js +36 -0
  48. package/dist/Icons/index.d.ts +3 -0
  49. package/dist/Icons.js +81 -78
  50. package/dist/IconsAnimated/PanelLeftCloseIcon.js +3 -3
  51. package/dist/IconsAnimated/PanelLeftOpenIcon.js +3 -3
  52. package/dist/Input.js +1 -1
  53. package/dist/InputNumeric.js +1 -1
  54. package/dist/{InputOTP-cVn5Bzyp.js → InputOTP-BkSw_KIB.js} +12 -10
  55. package/dist/InputOTP.js +1 -1
  56. package/dist/Kbd.js +1 -1
  57. package/dist/Label.js +1 -1
  58. package/dist/MultiSelect/MultiSelectBase.d.ts +6 -4
  59. package/dist/MultiSelect/MultiSelectBase.js +235 -209
  60. package/dist/MultiSelect.d.ts +2 -1
  61. package/dist/MultiSelect.js +14 -12
  62. package/dist/Popover.js +1 -1
  63. package/dist/RadioButton.js +1 -1
  64. package/dist/RadioButtonGroup/RadioButtonGroupBase.js +1 -1
  65. package/dist/RadioButtonGroup.js +1 -1
  66. package/dist/RadioGroup-DqKggFnI.js +328 -0
  67. package/dist/RadioGroup.d.ts +7 -0
  68. package/dist/RadioGroup.js +1 -1
  69. package/dist/Select.d.ts +5 -2
  70. package/dist/Select.js +100 -85
  71. package/dist/Separator.js +1 -1
  72. package/dist/Skeleton.js +1 -1
  73. package/dist/{Slider-BzzZT3Zm.js → Slider-CfUFkWU4.js} +1 -1
  74. package/dist/Slider.js +1 -1
  75. package/dist/Switch-Wj_zov--.js +144 -0
  76. package/dist/Switch.d.ts +12 -3
  77. package/dist/Switch.js +1 -1
  78. package/dist/Tabs/TabsBase.js +4 -4
  79. package/dist/Tabs.js +1 -1
  80. package/dist/Textarea.d.ts +3 -2
  81. package/dist/Textarea.js +50 -45
  82. package/dist/{Toast-9zqXxKKO.js → Toast-CJvzLlMD.js} +1 -1
  83. package/dist/Toast.js +1 -1
  84. package/dist/Toggle.js +1 -1
  85. package/dist/ToggleGroup.js +1 -1
  86. package/dist/{Tooltip-D1K8kY1y.js → Tooltip-BR0tdif4.js} +2 -2
  87. package/dist/Tooltip.js +1 -1
  88. package/dist/Tray.js +4 -4
  89. package/dist/{chunk-h9knIhTc.js → chunk-C4rFPcKS.js} +1 -1
  90. package/dist/dist-DcUGLq_y.js +149 -0
  91. package/dist/main.js +1 -1
  92. package/dist/primitives/button.js +1 -1
  93. package/dist/primitives/input-group.js +1 -1
  94. package/dist/primitives/input.js +1 -1
  95. package/dist/primitives/popover.js +1 -1
  96. package/dist/primitives/select.d.ts.map +1 -1
  97. package/dist/primitives/select.js +56 -53
  98. package/dist/primitives/textarea.js +1 -1
  99. package/dist/{proxy-Dn10Pl_g.js → proxy-CCB7C4Pu.js} +10 -10
  100. package/dist/styles/spectral.css +1 -1
  101. package/dist/{twUtils-VNWgstKL.js → twUtils-D_qzdiwM.js} +1 -1
  102. package/dist/{use-animation-CBUDycyW.js → use-animation-C-qL83hj.js} +1 -1
  103. package/dist/utils/dropdownPositioning.d.ts +13 -0
  104. package/dist/utils/dropdownPositioning.d.ts.map +1 -0
  105. package/dist/utils/dropdownPositioning.js +43 -0
  106. package/dist/utils/dropdownPositioning.test.d.ts +2 -0
  107. package/dist/utils/dropdownPositioning.test.d.ts.map +1 -0
  108. package/dist/utils/dropdownPositioning.test.js +21 -0
  109. package/dist/utils/formFieldUtils.d.ts +15 -1
  110. package/dist/utils/formFieldUtils.d.ts.map +1 -1
  111. package/dist/utils/formFieldUtils.js +35 -19
  112. package/dist/utils/twUtils.js +1 -1
  113. package/package.json +26 -22
  114. package/dist/RadioGroup-w_q6RGEK.js +0 -447
  115. package/dist/Switch-CVzRJ-0n.js +0 -126
  116. /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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dropdownPositioning.test.d.ts.map
@@ -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":"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"}
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-VNWgstKL.js";
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], c = (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", s(n), r), l = (t, n = "bottom") => {
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", u(), "transition-[opacity,transform] duration-150 motion-reduce:transform-none motion-reduce:transition-none", "will-change-[opacity,transform]", r, i);
16
- }, u = () => "rounded-lg border border-input-border bg-input-bg shadow-md", d = (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", s(t), n), f = (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", s(t), n), p = (e, t) => {
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
- }, m = (e) => `${e}-error`, h = (t, n, r, i) => ({
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
- }), g = (e = {}) => ({
41
+ }), _ = (e = {}) => ({
26
42
  "--field-border-radius": "0.5rem",
27
43
  "--field-height": "3rem",
28
44
  "--field-padding": "1rem",
29
45
  ...e
30
- }), _ = (e, t = "default") => ({
46
+ }), v = (e, t = "default") => ({
31
47
  isDisabled: e ?? t === "disabled",
32
48
  isLoading: t === "loading",
33
49
  isInvalid: t === "error"
34
- }), v = (e) => {
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
- }, y = (e, r = !1, i, o, s, c) => {
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
- }, b = (e) => {
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
- }, x = ({ className: t, message: n = "Loading…" }) => /* @__PURE__ */ o("div", {
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
- }), S = ({ className: t, message: n = "No options found" }) => /* @__PURE__ */ o("div", {
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
- }), C = (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, w = ({ className: t, id: n, dataTestId: r, message: i }) => {
125
- let a = C(i);
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
- }, T = ({ className: t, id: n, dataTestId: r, message: i }) => {
136
- let a = C(i);
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
- }, E = (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"), D = (e) => {
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 { S as EmptyState, w as ErrorMessage, x as LoadingState, T as WarningMessage, h as getAriaProps, l as getDropdownClasses, u as getDropdownSurfaceClasses, m as getErrorMessageId, g as getFormFieldCSSProperties, d as getInputClasses, E as getOptionClasses, s as getStateClasses, f as getTextareaClasses, c as getTriggerClasses, b as groupOptions, D as scrollIntoView, v as useClickOutside, p as useFormFieldId, _ as useFormFieldState, y as useKeyboardNavigation };
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 };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../twUtils-VNWgstKL.js";
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.11.2",
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.13.2",
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.30.0",
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.41.0",
85
+ "@sentry/react": "^10.50.0",
85
86
  "@sentry/vite-plugin": "^4.9.1",
86
- "@storybook/addon-docs": "^10.3.4",
87
- "@storybook/addon-themes": "^10.3.4",
88
- "@storybook/addon-vitest": "^10.3.4",
89
- "@storybook/builder-vite": "^10.3.4",
90
- "@storybook/react-vite": "^10.3.4",
91
- "@tailwindcss/vite": "^4.2.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.0",
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.2",
100
- "@vitest/browser-playwright": "^4.1.2",
101
- "@vitest/coverage-v8": "^4.1.2",
102
- "@vitest/ui": "^4.1.2",
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
- "oxlint": "^1.58.0",
107
+ "oxfmt": "^0.43.0",
108
+ "oxlint": "^1.61.0",
107
109
  "oxlint-tsgolint": "^0.11.5",
108
110
  "playwright": "^1.58.2",
109
- "oxfmt": "^0.43.0",
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.2",
114
+ "tailwindcss": "^4.2.4",
114
115
  "typescript": "^5.9.3",
115
- "vite": "^8.0.5",
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.2",
119
- "vitest-browser-react": "^2.1.0"
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"