@spear-ai/spectral 1.4.26 → 1.4.27

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 (203) hide show
  1. package/dist/Accordion.d.ts +28 -9
  2. package/dist/Accordion.js +203 -183
  3. package/dist/Alert/AlertBase.d.ts +24 -16
  4. package/dist/Alert/AlertBase.js +33 -18
  5. package/dist/Alert.js +1 -1
  6. package/dist/Avatar.js +11 -11
  7. package/dist/Button.d.ts +7 -2
  8. package/dist/Button.js +25 -12
  9. package/dist/ButtonIcon.d.ts +7 -2
  10. package/dist/ButtonIcon.js +25 -16
  11. package/dist/Card.js +1 -1
  12. package/dist/Checkbox/CheckboxBase.d.ts +13 -13
  13. package/dist/Checkbox/CheckboxBase.js +128 -125
  14. package/dist/Checkbox.d.ts +7 -2
  15. package/dist/Checkbox.js +29 -22
  16. package/dist/DataCard.js +3 -3
  17. package/dist/Dialog.js +2 -2
  18. package/dist/Drawer.js +2 -2
  19. package/dist/HoverCard.js +1 -1
  20. package/dist/Icons/AnalyzeIcon.d.ts +3 -1
  21. package/dist/Icons/AnalyzeIcon.js +3 -6
  22. package/dist/Icons/AnnotationsIcon.d.ts +3 -1
  23. package/dist/Icons/AnnotationsIcon.js +3 -6
  24. package/dist/Icons/ApprovedIcon.d.ts +3 -1
  25. package/dist/Icons/ApprovedIcon.js +3 -6
  26. package/dist/Icons/ArrowDownIcon.d.ts +3 -1
  27. package/dist/Icons/ArrowDownIcon.js +3 -6
  28. package/dist/Icons/ArrowUpIcon.d.ts +3 -1
  29. package/dist/Icons/ArrowUpIcon.js +4 -7
  30. package/dist/Icons/CalendarIcon.d.ts +3 -1
  31. package/dist/Icons/CalendarIcon.js +9 -12
  32. package/dist/Icons/CheckCircleIcon.d.ts +3 -1
  33. package/dist/Icons/CheckCircleIcon.js +2 -5
  34. package/dist/Icons/CheckSquareIcon.d.ts +3 -1
  35. package/dist/Icons/CheckSquareIcon.js +4 -7
  36. package/dist/Icons/CheckmarkIcon.d.ts +3 -1
  37. package/dist/Icons/CheckmarkIcon.js +5 -8
  38. package/dist/Icons/ChevronDownIcon.d.ts +3 -1
  39. package/dist/Icons/ChevronDownIcon.js +5 -8
  40. package/dist/Icons/ChevronUpIcon.d.ts +3 -1
  41. package/dist/Icons/ChevronUpIcon.js +5 -8
  42. package/dist/Icons/ClockIcon.d.ts +3 -1
  43. package/dist/Icons/ClockIcon.js +5 -8
  44. package/dist/Icons/CloseCircleIcon.d.ts +3 -1
  45. package/dist/Icons/CloseCircleIcon.js +4 -7
  46. package/dist/Icons/CloseIcon.d.ts +3 -1
  47. package/dist/Icons/CloseIcon.js +5 -8
  48. package/dist/Icons/DashboardIcon.d.ts +3 -1
  49. package/dist/Icons/DashboardIcon.js +3 -6
  50. package/dist/Icons/DatabaseIcon.d.ts +3 -1
  51. package/dist/Icons/DatabaseIcon.js +4 -7
  52. package/dist/Icons/DeleteIcon.d.ts +3 -1
  53. package/dist/Icons/DeleteIcon.js +4 -7
  54. package/dist/Icons/DurationIcon.d.ts +3 -1
  55. package/dist/Icons/DurationIcon.js +3 -6
  56. package/dist/Icons/EditIcon.d.ts +3 -1
  57. package/dist/Icons/EditIcon.js +3 -6
  58. package/dist/Icons/EmailIcon.d.ts +3 -1
  59. package/dist/Icons/EmailIcon.js +4 -7
  60. package/dist/Icons/EraserIcon.d.ts +3 -1
  61. package/dist/Icons/EraserIcon.js +9 -10
  62. package/dist/Icons/ErrorIcon.d.ts +3 -1
  63. package/dist/Icons/ErrorIcon.js +4 -7
  64. package/dist/Icons/EyeClosedIcon.d.ts +3 -1
  65. package/dist/Icons/EyeClosedIcon.js +4 -7
  66. package/dist/Icons/EyeClosedIcon2.d.ts +3 -1
  67. package/dist/Icons/EyeClosedIcon2.js +3 -6
  68. package/dist/Icons/EyeOpenIcon.d.ts +3 -1
  69. package/dist/Icons/EyeOpenIcon.js +6 -9
  70. package/dist/Icons/GoToFirstIcon.d.ts +3 -1
  71. package/dist/Icons/GoToFirstIcon.js +4 -7
  72. package/dist/Icons/GoToLastIcon.d.ts +3 -1
  73. package/dist/Icons/GoToLastIcon.js +4 -7
  74. package/dist/Icons/HarmonicCursorsIcon.d.ts +3 -1
  75. package/dist/Icons/HarmonicCursorsIcon.js +4 -7
  76. package/dist/Icons/IconBase.d.ts +4 -2
  77. package/dist/Icons/IconBase.js +17 -8
  78. package/dist/Icons/InfoIcon.d.ts +3 -1
  79. package/dist/Icons/InfoIcon.js +4 -7
  80. package/dist/Icons/LabelIcon.d.ts +3 -1
  81. package/dist/Icons/LabelIcon.js +3 -6
  82. package/dist/Icons/LassoIcon.d.ts +3 -1
  83. package/dist/Icons/LassoIcon.js +5 -8
  84. package/dist/Icons/LineToolIcon.d.ts +3 -1
  85. package/dist/Icons/LineToolIcon.js +3 -6
  86. package/dist/Icons/LineToolIcon2.d.ts +3 -1
  87. package/dist/Icons/LineToolIcon2.js +3 -6
  88. package/dist/Icons/LiveViewIcon.d.ts +3 -1
  89. package/dist/Icons/LiveViewIcon.js +2 -5
  90. package/dist/Icons/LoaderIcon.d.ts +3 -1
  91. package/dist/Icons/LoaderIcon.js +6 -7
  92. package/dist/Icons/LocationIcon.d.ts +3 -1
  93. package/dist/Icons/LocationIcon.js +3 -6
  94. package/dist/Icons/LogoutIcon.d.ts +3 -1
  95. package/dist/Icons/LogoutIcon.js +4 -7
  96. package/dist/Icons/MessagesIcon.d.ts +3 -1
  97. package/dist/Icons/MessagesIcon.js +5 -8
  98. package/dist/Icons/MetadataIcon.d.ts +3 -1
  99. package/dist/Icons/MetadataIcon.js +4 -7
  100. package/dist/Icons/MinusIcon.d.ts +3 -1
  101. package/dist/Icons/MinusIcon.js +3 -6
  102. package/dist/Icons/OntologyIcon.d.ts +3 -1
  103. package/dist/Icons/OntologyIcon.js +2 -5
  104. package/dist/Icons/PanelIconClose.d.ts +3 -1
  105. package/dist/Icons/PanelIconClose.js +4 -7
  106. package/dist/Icons/PanelIconOpen.d.ts +3 -1
  107. package/dist/Icons/PanelIconOpen.js +8 -11
  108. package/dist/Icons/PlayIcon.d.ts +3 -1
  109. package/dist/Icons/PlayIcon.js +3 -6
  110. package/dist/Icons/PlusIcon.d.ts +3 -1
  111. package/dist/Icons/PlusIcon.js +4 -7
  112. package/dist/Icons/ResetIcon.d.ts +3 -1
  113. package/dist/Icons/ResetIcon.js +4 -7
  114. package/dist/Icons/ReviewedIcon.d.ts +3 -1
  115. package/dist/Icons/ReviewedIcon.js +3 -6
  116. package/dist/Icons/ScissorsIcon.d.ts +3 -1
  117. package/dist/Icons/ScissorsIcon.js +6 -9
  118. package/dist/Icons/SettingsIcon.d.ts +3 -1
  119. package/dist/Icons/SettingsIcon.js +3 -6
  120. package/dist/Icons/SortAscendingIcon.d.ts +3 -1
  121. package/dist/Icons/SortAscendingIcon.js +3 -6
  122. package/dist/Icons/SortAtoZIcon.d.ts +3 -1
  123. package/dist/Icons/SortAtoZIcon.js +3 -6
  124. package/dist/Icons/SortDescendingIcon.d.ts +3 -1
  125. package/dist/Icons/SortDescendingIcon.js +3 -6
  126. package/dist/Icons/SortZtoAIcon.d.ts +3 -1
  127. package/dist/Icons/SortZtoAIcon.js +3 -6
  128. package/dist/Icons/StackIcon.d.ts +3 -1
  129. package/dist/Icons/StackIcon.js +4 -7
  130. package/dist/Icons/StarIcon.d.ts +3 -1
  131. package/dist/Icons/StarIcon.js +3 -6
  132. package/dist/Icons/TrashIcon.d.ts +3 -1
  133. package/dist/Icons/TrashIcon.js +3 -6
  134. package/dist/Icons/UndoIcon.d.ts +3 -1
  135. package/dist/Icons/UndoIcon.js +4 -7
  136. package/dist/Icons/UserIcon.d.ts +3 -1
  137. package/dist/Icons/UserIcon.js +3 -6
  138. package/dist/Icons/WarningIcon.d.ts +3 -1
  139. package/dist/Icons/WarningIcon.js +5 -8
  140. package/dist/Icons/ZoomAllIcon.d.ts +3 -1
  141. package/dist/Icons/ZoomAllIcon.js +3 -6
  142. package/dist/Icons/ZoomXIcon.d.ts +3 -1
  143. package/dist/Icons/ZoomXIcon.js +4 -7
  144. package/dist/Icons/ZoomYIcon.d.ts +3 -1
  145. package/dist/Icons/ZoomYIcon.js +4 -7
  146. package/dist/Input/InputUtils.d.ts +4 -4
  147. package/dist/Input/InputUtils.js +1 -1
  148. package/dist/Input.d.ts +7 -17
  149. package/dist/Input.js +105 -101
  150. package/dist/InputOTP.d.ts +27 -7
  151. package/dist/InputOTP.js +171 -146
  152. package/dist/Label.d.ts +7 -2
  153. package/dist/Label.js +12 -9
  154. package/dist/MultiSelect/MultiSelectBase.d.ts +7 -2
  155. package/dist/MultiSelect/MultiSelectBase.js +212 -213
  156. package/dist/{MultiSelect/MutiSelect.d.ts → MultiSelect.d.ts} +8 -2
  157. package/dist/MultiSelect.js +27 -0
  158. package/dist/Popover.js +1 -1
  159. package/dist/RadioButtonGroup.js +1 -1
  160. package/dist/RadioGroup.d.ts +20 -14
  161. package/dist/RadioGroup.js +177 -148
  162. package/dist/Select.d.ts +7 -2
  163. package/dist/Select.js +108 -109
  164. package/dist/Separator.d.ts +8 -8
  165. package/dist/Separator.js +14 -15
  166. package/dist/Switch/SwitchBase.d.ts +13 -11
  167. package/dist/Switch/SwitchBase.js +84 -61
  168. package/dist/Switch.d.ts +11 -4
  169. package/dist/Switch.js +19 -20
  170. package/dist/Tabs/TabsBase.d.ts +16 -6
  171. package/dist/Tabs/TabsBase.js +133 -96
  172. package/dist/Tabs/tabsUtils.d.ts +6 -2
  173. package/dist/Tabs/tabsUtils.js +5 -2
  174. package/dist/Tabs.js +18 -18
  175. package/dist/Textarea.d.ts +7 -2
  176. package/dist/Textarea.js +78 -61
  177. package/dist/Toggle/ToggleBase.d.ts +4 -8
  178. package/dist/Toggle/ToggleBase.js +29 -16
  179. package/dist/Toggle.d.ts +4 -2
  180. package/dist/Toggle.js +23 -13
  181. package/dist/ToggleGroup/ToggleGroupBase.d.ts +4 -7
  182. package/dist/ToggleGroup/ToggleGroupBase.js +82 -73
  183. package/dist/ToggleGroup.d.ts +7 -2
  184. package/dist/ToggleGroup.js +31 -19
  185. package/dist/Tray.d.ts +47 -15
  186. package/dist/Tray.js +98 -60
  187. package/dist/hooks/useAccordionAutoScroll.d.ts +1 -1
  188. package/dist/hooks/useAccordionAutoScroll.d.ts.map +1 -1
  189. package/dist/hooks/useAccordionAutoScroll.js +35 -34
  190. package/dist/{index-BSCg4Mei.js → index-B0Kp8R0j.js} +3 -3
  191. package/dist/{index-jgQ7sgLl.js → index-D4jMMaAi.js} +5 -5
  192. package/dist/primitives/input.d.ts.map +1 -1
  193. package/dist/primitives/input.js +1 -4
  194. package/dist/primitives/select.d.ts.map +1 -1
  195. package/dist/primitives/select.js +4 -11
  196. package/dist/primitives/slot.d.ts +11 -4
  197. package/dist/primitives/slot.d.ts.map +1 -1
  198. package/dist/primitives/slot.js +32 -28
  199. package/dist/primitives/textarea.d.ts.map +1 -1
  200. package/dist/primitives/textarea.js +1 -3
  201. package/dist/utils/formFieldUtils.js +2 -2
  202. package/package.json +1 -1
  203. package/dist/MultiSelect/MutiSelect.js +0 -19
package/dist/Textarea.js CHANGED
@@ -65,66 +65,83 @@ import "./Icons/ZoomAllIcon.js";
65
65
  import "./Icons/ZoomXIcon.js";
66
66
  import "./Icons/ZoomYIcon.js";
67
67
  import { Label as D } from "./Label.js";
68
- import { useFormFieldId as M, getAriaProps as O, getErrorMessageId as _, getTextareaClasses as $, useFormFieldState as G, ErrorMessage as V } from "./utils/formFieldUtils.js";
69
- import { cn as g } from "./utils/twUtils.js";
70
- import { forwardRef as H, useRef as J } from "react";
71
- const K = "absolute right-4 top-4", Q = (t) => t || "off", U = (t, a) => {
72
- const m = "absolute bottom-2 right-3 text-xs pointer-events-none z-10 tabular-nums", o = t >= a ? "text-danger-400" : "text-text-secondary";
73
- return g(m, o);
74
- }, W = H(
75
- ({ autoComplete: t, className: a, disabled: m, errorMessage: o, id: C, label: c, labelClassName: b, maxLength: i = 280, name: d, onBlur: N, onChange: I, onFocus: F, placeholder: S, required: u, state: r = "default", value: s = "", ...x }, v) => {
76
- const p = M(C, d), h = _(p), y = J(null), P = v || y, { handleFocus: T, handleBlur: A, handleChange: R, handlePaste: w } = z({
77
- maxLength: i,
78
- value: s,
79
- onChange: I || (() => {
80
- }),
81
- onFocus: F,
82
- onBlur: N
83
- }), { isDisabled: f, isLoading: E } = G(m, r), L = O(r, h, u, x["aria-describedby"]), l = s?.length || 0, j = $(r, a), k = () => ({
84
- "--textarea-min-height": "6rem",
85
- "--textarea-max-height": "12rem",
86
- "--textarea-border-radius": "0.5rem"
87
- });
88
- return /* @__PURE__ */ n("div", { className: "w-full", children: [
89
- c && /* @__PURE__ */ e(D, { "data-testid": "spectral-textarea-label", htmlFor: p, className: g("block mb-2", f && "opacity-50 cursor-not-allowed", b), children: c }),
90
- /* @__PURE__ */ n("div", { className: "relative", children: [
91
- /* @__PURE__ */ e(
92
- "textarea",
93
- {
94
- "aria-multiline": "true",
95
- autoComplete: Q(t),
96
- className: j,
97
- "data-state": r,
98
- "data-testid": "spectral-textarea",
99
- disabled: f,
100
- id: p,
101
- name: d,
102
- onBlur: A,
103
- onChange: R,
104
- onFocus: T,
105
- onPaste: w,
106
- placeholder: S,
107
- ref: P,
108
- required: u,
109
- spellCheck: "true",
110
- style: k(),
111
- value: s,
112
- ...L,
113
- ...x
114
- }
115
- ),
116
- E && /* @__PURE__ */ e("div", { className: K, "data-testid": "spectral-textarea-loading-icon", children: /* @__PURE__ */ e(B, { size: 24 }) }),
117
- /* @__PURE__ */ n("div", { "aria-label": `${l} of ${i} characters used`, "aria-live": "polite", className: U(l, i), "data-testid": "spectral-textarea-counter", role: "status", children: [
118
- l,
119
- "/",
120
- i
121
- ] })
122
- ] }),
123
- r === "error" && o && /* @__PURE__ */ e(V, { dataTestId: "spectral-textarea-error-message", id: h, message: o })
124
- ] });
125
- }
126
- );
127
- W.displayName = "Textarea";
68
+ import { useFormFieldId as M, useFormFieldState as O, getAriaProps as _, getTextareaClasses as $, ErrorMessage as G, getErrorMessageId as V } from "./utils/formFieldUtils.js";
69
+ import { cn as C } from "./utils/twUtils.js";
70
+ import { useRef as H } from "react";
71
+ const J = "absolute right-4 top-4", K = (t) => t || "off", Q = (t, i) => {
72
+ const a = "absolute bottom-2 right-3 text-xs pointer-events-none z-10 tabular-nums", m = t >= i ? "text-danger-400" : "text-text-secondary";
73
+ return C(a, m);
74
+ }, U = ({
75
+ ref: t,
76
+ autoComplete: i,
77
+ className: a,
78
+ disabled: m,
79
+ errorMessage: c,
80
+ id: b,
81
+ label: d,
82
+ labelClassName: N,
83
+ maxLength: o = 280,
84
+ name: u,
85
+ onBlur: I,
86
+ onChange: F,
87
+ onFocus: S,
88
+ placeholder: v,
89
+ required: x,
90
+ state: r = "default",
91
+ value: s = "",
92
+ ...h
93
+ }) => {
94
+ const p = M(b, u), g = V(p), y = H(null), P = t || y, { handleFocus: T, handleBlur: A, handleChange: E, handlePaste: L } = z({
95
+ maxLength: o,
96
+ value: s,
97
+ onChange: F || (() => {
98
+ }),
99
+ onFocus: S,
100
+ onBlur: I
101
+ }), { isDisabled: f, isLoading: R } = O(m, r), j = _(r, g, x, h["aria-describedby"]), l = s?.length || 0, k = $(r, a), w = () => ({
102
+ "--textarea-min-height": "6rem",
103
+ "--textarea-max-height": "12rem",
104
+ "--textarea-border-radius": "0.5rem"
105
+ });
106
+ return /* @__PURE__ */ n("div", { className: "w-full", children: [
107
+ d && /* @__PURE__ */ e(D, { "data-testid": "spectral-textarea-label", htmlFor: p, className: C("mb-2 block", f && "cursor-not-allowed opacity-50", N), children: d }),
108
+ /* @__PURE__ */ n("div", { className: "relative", children: [
109
+ /* @__PURE__ */ e(
110
+ "textarea",
111
+ {
112
+ "aria-multiline": "true",
113
+ autoComplete: K(i),
114
+ className: k,
115
+ "data-state": r,
116
+ "data-testid": "spectral-textarea",
117
+ disabled: f,
118
+ id: p,
119
+ name: u,
120
+ onBlur: A,
121
+ onChange: E,
122
+ onFocus: T,
123
+ onPaste: L,
124
+ placeholder: v,
125
+ ref: P,
126
+ required: x,
127
+ spellCheck: "true",
128
+ style: w(),
129
+ value: s,
130
+ ...j,
131
+ ...h
132
+ }
133
+ ),
134
+ R && /* @__PURE__ */ e("div", { className: J, "data-testid": "spectral-textarea-loading-icon", children: /* @__PURE__ */ e(B, { size: 24 }) }),
135
+ /* @__PURE__ */ n("div", { "aria-label": `${l} of ${o} characters used`, "aria-live": "polite", className: Q(l, o), "data-testid": "spectral-textarea-counter", role: "status", children: [
136
+ l,
137
+ "/",
138
+ o
139
+ ] })
140
+ ] }),
141
+ r === "error" && c && /* @__PURE__ */ e(G, { dataTestId: "spectral-textarea-error-message", id: g, message: c })
142
+ ] });
143
+ };
144
+ U.displayName = "Textarea";
128
145
  export {
129
- W as Textarea
146
+ U as Textarea
130
147
  };
@@ -1,5 +1,5 @@
1
1
  import { AsChildProp } from '../primitives/slot';
2
- import { ButtonHTMLAttributes } from 'react';
2
+ import { ButtonHTMLAttributes, Ref } from 'react';
3
3
  export type ToggleProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> & Omit<AsChildProp, 'asChild'> & {
4
4
  pressed?: boolean;
5
5
  defaultPressed?: boolean;
@@ -7,11 +7,7 @@ export type ToggleProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChang
7
7
  disabled?: boolean;
8
8
  asChild?: boolean;
9
9
  };
10
- export declare const ToggleBase: import('react').ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> & Omit<AsChildProp, "asChild"> & {
11
- pressed?: boolean;
12
- defaultPressed?: boolean;
13
- onPressedChange?: (pressed: boolean) => void;
14
- disabled?: boolean;
15
- asChild?: boolean;
16
- } & import('react').RefAttributes<HTMLButtonElement | HTMLDivElement>>;
10
+ export declare const ToggleBase: ({ ref, pressed: pressedProp, defaultPressed, onPressedChange, disabled, className, onKeyDown, onClick, type, asChild, children, ...rest }: ToggleProps & {
11
+ ref?: Ref<HTMLButtonElement>;
12
+ }) => import("react/jsx-runtime").JSX.Element;
17
13
  //# sourceMappingURL=ToggleBase.d.ts.map
@@ -1,26 +1,39 @@
1
1
  "use client";
2
2
  import "../styles/main.css";
3
- import { jsx as f } from "react/jsx-runtime";
3
+ import { jsx as s } from "react/jsx-runtime";
4
4
  import { useControllableState as k } from "../hooks/useControllableState.js";
5
5
  import { Slot as C } from "../primitives/slot.js";
6
- import { forwardRef as T, useCallback as s } from "react";
7
- const B = T(function({ pressed: c, defaultPressed: m = !1, onPressedChange: g, disabled: t, className: v, onKeyDown: a, onClick: n, type: h = "button", asChild: b = !1, children: l, ...u }, d) {
6
+ import { useCallback as f } from "react";
7
+ const B = function({
8
+ ref: l,
9
+ pressed: c,
10
+ defaultPressed: m = !1,
11
+ onPressedChange: g,
12
+ disabled: t,
13
+ className: v,
14
+ onKeyDown: n,
15
+ onClick: a,
16
+ type: h = "button",
17
+ asChild: b = !1,
18
+ children: u,
19
+ ...d
20
+ }) {
8
21
  const [r, i] = k({
9
22
  defaultValue: m,
10
23
  onChange: g,
11
24
  value: c
12
- }), o = s(() => {
25
+ }), o = f(() => {
13
26
  t || i(!r);
14
- }, [t, r, i]), x = s(
27
+ }, [t, r, i]), x = f(
15
28
  (e) => {
16
- a && a(e), !e.defaultPrevented && (e.key === " " || e.key === "Enter") && (e.preventDefault(), o());
29
+ n && n(e), !e.defaultPrevented && (e.key === " " || e.key === "Enter") && (e.preventDefault(), o());
17
30
  },
18
- [o, a]
19
- ), P = s(
31
+ [o, n]
32
+ ), P = f(
20
33
  (e) => {
21
- n && n(e), !e.defaultPrevented && o();
34
+ a && a(e), !e.defaultPrevented && o();
22
35
  },
23
- [o, n]
36
+ [o, a]
24
37
  ), p = {
25
38
  "aria-disabled": t || void 0,
26
39
  "aria-pressed": r,
@@ -30,18 +43,18 @@ const B = T(function({ pressed: c, defaultPressed: m = !1, onPressedChange: g, d
30
43
  onClick: P,
31
44
  onKeyDown: x
32
45
  };
33
- return b ? /* @__PURE__ */ f(
46
+ return b ? /* @__PURE__ */ s(
34
47
  "div",
35
48
  {
36
- ref: d,
49
+ ref: l,
37
50
  role: "button",
38
51
  tabIndex: t ? -1 : 0,
39
- ...u,
52
+ ...d,
40
53
  ...p,
41
- children: /* @__PURE__ */ f(C, { children: l })
54
+ children: /* @__PURE__ */ s(C, { children: u })
42
55
  }
43
- ) : /* @__PURE__ */ f("button", { ref: d, tabIndex: t ? -1 : 0, type: h, ...u, ...p, children: l });
44
- });
56
+ ) : /* @__PURE__ */ s("button", { ref: l, tabIndex: t ? -1 : 0, type: h, ...d, ...p, children: u });
57
+ };
45
58
  export {
46
59
  B as ToggleBase
47
60
  };
package/dist/Toggle.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ToggleBase } from './ToggleBase';
2
2
  import { VariantProps } from 'class-variance-authority';
3
- import { ComponentProps, CSSProperties } from 'react';
3
+ import { ComponentProps, CSSProperties, Ref } from 'react';
4
4
  export type ActiveColor = string;
5
5
  export declare function getActiveColorStyle(activeColor: ActiveColor | undefined, activeTextColor?: ActiveColor): CSSProperties | undefined;
6
6
  export type ToggleProps = ComponentProps<typeof ToggleBase> & VariantProps<typeof toggleVariants> & {
@@ -12,5 +12,7 @@ export declare const toggleVariants: (props?: ({
12
12
  size?: "default" | "sm" | "lg" | null | undefined;
13
13
  layout?: "default" | "expanded" | null | undefined;
14
14
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
15
- export declare const Toggle: import('react').ForwardRefExoticComponent<Omit<ToggleProps, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
15
+ export declare const Toggle: ({ ref, className, variant, size, layout, disabled, activeColor, activeTextColor, style, ...props }: ToggleProps & {
16
+ ref?: Ref<HTMLButtonElement>;
17
+ }) => import("react/jsx-runtime").JSX.Element;
16
18
  //# sourceMappingURL=Toggle.d.ts.map
package/dist/Toggle.js CHANGED
@@ -1,27 +1,26 @@
1
- "use client";
2
1
  import "./styles/main.css";
3
2
  import { jsx as c } from "react/jsx-runtime";
4
3
  import { ToggleBase as v } from "./Toggle/ToggleBase.js";
5
4
  import { cn as b } from "./utils/twUtils.js";
6
5
  import { c as u } from "./index-D29mdTf5.js";
7
- import { forwardRef as h } from "react";
8
- const f = /^(#|rgb|hsl|oklch|oklab|lab|lch|color|var\(|transparent|currentcolor)/i, p = /^(success|warning|danger|primary|neutral|secondary)-\d+$/;
9
- function r(e) {
10
- return f.test(e) ? e : p.test(e) ? `var(--horizon-color-${e})` : `var(--color-${e})`;
6
+ import "react";
7
+ const h = /^(#|rgb|hsl|oklch|oklab|lab|lch|color|var\(|transparent|currentcolor)/i, f = /^(success|warning|danger|primary|neutral|secondary)-\d+$/;
8
+ function o(e) {
9
+ return h.test(e) ? e : f.test(e) ? `var(--horizon-color-${e})` : `var(--color-${e})`;
11
10
  }
12
- function m(e, t) {
11
+ function p(e, t) {
13
12
  if (!(!e && !t))
14
13
  return {
15
14
  ...e && {
16
- "--color-toggle-bg--active": r(e),
17
- "--color-toggle-border--active": r(e)
15
+ "--color-toggle-bg--active": o(e),
16
+ "--color-toggle-border--active": o(e)
18
17
  },
19
18
  ...t && {
20
- "--color-toggle-text--active": r(t)
19
+ "--color-toggle-text--active": o(t)
21
20
  }
22
21
  };
23
22
  }
24
- const x = u(
23
+ const m = u(
25
24
  `
26
25
  bg-toggle-bg inline-flex items-center justify-center gap-2 border rounded-md text-sm shadow-sm font-medium w-fit text-toggle-text whitespace-nowrap outline-none transition-[colors]
27
26
  [&_svg]:pointer-events-none [&_svg]:shrink-0 active:bg-toggle-bg--active hover:cursor-pointer hover:bg-toggle-bg--hover hover:border-toggle-border--hover hover:text-toggle-text--hover
@@ -51,9 +50,20 @@ const x = u(
51
50
  layout: "default"
52
51
  }
53
52
  }
54
- ), A = h(({ className: e, variant: t, size: o, layout: a, disabled: i, activeColor: g, activeTextColor: n, style: s, ...l }, d) => /* @__PURE__ */ c(v, { ref: d, disabled: i, "data-slot": "toggle", "data-testid": "spectral-toggle", className: b(x({ variant: t, size: o, layout: a }), e), style: { ...m(g, n), ...s }, ...l }));
53
+ ), A = ({
54
+ ref: e,
55
+ className: t,
56
+ variant: r,
57
+ size: a,
58
+ layout: i,
59
+ disabled: g,
60
+ activeColor: n,
61
+ activeTextColor: s,
62
+ style: l,
63
+ ...d
64
+ }) => /* @__PURE__ */ c(v, { ref: e, disabled: g, "data-slot": "toggle", "data-testid": "spectral-toggle", className: b(m({ variant: r, size: a, layout: i }), t), style: { ...p(n, s), ...l }, ...d });
55
65
  export {
56
66
  A as Toggle,
57
- m as getActiveColorStyle,
58
- x as toggleVariants
67
+ p as getActiveColorStyle,
68
+ m as toggleVariants
59
69
  };
@@ -1,4 +1,4 @@
1
- import { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react';
1
+ import { ButtonHTMLAttributes, HTMLAttributes, ReactNode, Ref } from 'react';
2
2
  type Orientation = 'horizontal' | 'vertical';
3
3
  export type CommonGroupProps = {
4
4
  className?: string;
@@ -30,11 +30,8 @@ export type ToggleGroupItemProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>,
30
30
  /** @deprecated This prop is ignored - pressed state is managed by ToggleGroup */
31
31
  defaultPressed?: boolean;
32
32
  };
33
- export declare const ToggleGroupItemBase: import('react').ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange" | "pressed" | "defaultPressed" | "onPressedChange"> & ItemRenderProps & {
34
- /** @deprecated This prop is ignored - pressed state is managed by ToggleGroup */
35
- pressed?: boolean;
36
- /** @deprecated This prop is ignored - pressed state is managed by ToggleGroup */
37
- defaultPressed?: boolean;
38
- } & import('react').RefAttributes<HTMLButtonElement>>;
33
+ export declare const ToggleGroupItemBase: ({ ref, value, disabled, className, children, onKeyDown, onClick, ...rest }: ToggleGroupItemProps & {
34
+ ref?: Ref<HTMLButtonElement>;
35
+ }) => import("react/jsx-runtime").JSX.Element;
39
36
  export {};
40
37
  //# sourceMappingURL=ToggleGroupBase.d.ts.map
@@ -1,97 +1,106 @@
1
1
  "use client";
2
2
  import "../styles/main.css";
3
- import { jsx as k, jsxs as E } from "react/jsx-runtime";
4
- import { useControllableState as R } from "../hooks/useControllableState.js";
5
- import { clamp as M } from "../utils/sharedUtils.js";
6
- import { createContext as j, forwardRef as H, useContext as K, useRef as S, useImperativeHandle as L, useEffect as N, useCallback as u, useMemo as _ } from "react";
7
- const T = j(null), Q = (B) => {
3
+ import { jsxs as E, jsx as B } from "react/jsx-runtime";
4
+ import { useControllableState as M } from "../hooks/useControllableState.js";
5
+ import { clamp as R } from "../utils/sharedUtils.js";
6
+ import { createContext as j, useRef as S, useCallback as i, useMemo as H, useContext as K, useImperativeHandle as L, useEffect as N } from "react";
7
+ const T = j(null), Q = (C) => {
8
8
  const {
9
- className: r,
10
- defaultValue: d,
11
- disabled: I = !1,
12
- loop: g = !0,
13
- name: c,
14
- onValueChange: x,
15
- orientation: D = "horizontal",
16
- type: y = "single",
17
- value: C,
18
- "data-variant": z,
19
- "data-size": o,
20
- "data-slot": P,
21
- "data-layout": v,
22
- ...h
23
- } = B, f = y === "multiple", [n, b] = R({
24
- defaultValue: typeof d < "u" ? d : f ? [] : "",
25
- onChange: x,
26
- value: C
27
- }), a = S([]), w = u((t, s) => {
28
- const A = { val: t, el: s, disabled: !!s?.disabled };
29
- return a.current = [...a.current.filter((m) => m.val !== t), A], () => {
30
- a.current = a.current.filter((m) => m.val !== t);
9
+ className: z,
10
+ defaultValue: r,
11
+ disabled: l = !1,
12
+ loop: c = !0,
13
+ name: x,
14
+ onValueChange: v,
15
+ orientation: u = "horizontal",
16
+ type: d = "single",
17
+ value: a,
18
+ "data-variant": D,
19
+ "data-size": b,
20
+ "data-slot": f,
21
+ "data-layout": w,
22
+ ...G
23
+ } = C, p = d === "multiple", [n, m] = M({
24
+ defaultValue: typeof r < "u" ? r : p ? [] : "",
25
+ onChange: v,
26
+ value: a
27
+ }), o = S([]), g = i((t, s) => {
28
+ const P = { val: t, el: s, disabled: !!s?.disabled };
29
+ return o.current = [...o.current.filter((A) => A.val !== t), P], () => {
30
+ o.current = o.current.filter((A) => A.val !== t);
31
31
  };
32
- }, []), i = u(() => a.current.slice(), []), p = u(
33
- (t) => f ? Array.isArray(n) && n.includes(t) : n === t,
34
- [f, n]
35
- ), V = u((t) => b(t), [b]), G = u(
32
+ }, []), V = i(() => o.current.slice(), []), k = i(
33
+ (t) => p ? Array.isArray(n) && n.includes(t) : n === t,
34
+ [p, n]
35
+ ), e = i((t) => m(t), [m]), y = i(
36
36
  (t) => {
37
- const s = a.current;
37
+ const s = o.current;
38
38
  if (s.length === 0) return;
39
- const A = s.length - 1, m = g ? (t % s.length + s.length) % s.length : M(t, 0, A);
40
- s[m]?.el?.focus();
39
+ const P = s.length - 1, A = c ? (t % s.length + s.length) % s.length : R(t, 0, P);
40
+ s[A]?.el?.focus();
41
41
  },
42
- [g]
43
- ), e = _(
42
+ [c]
43
+ ), h = H(
44
44
  () => ({
45
- focusItemByIndex: G,
46
- groupDisabled: I,
47
- isItemPressed: p,
48
- itemsSnapshot: i,
49
- loop: g,
50
- name: c,
51
- orientation: D,
52
- register: w,
53
- setValue: V,
54
- type: y,
45
+ focusItemByIndex: y,
46
+ groupDisabled: l,
47
+ isItemPressed: k,
48
+ itemsSnapshot: V,
49
+ loop: c,
50
+ name: x,
51
+ orientation: u,
52
+ register: g,
53
+ setValue: e,
54
+ type: d,
55
55
  value: n
56
56
  }),
57
- [I, p, i, g, c, D, V, y, n]
58
- ), l = c;
59
- return /* @__PURE__ */ E("div", { className: r, "data-disabled": I ? "" : void 0, "data-layout": v, "data-orientation": D, "data-size": o, "data-slot": P, "data-variant": z, role: "group", ...h, children: [
60
- /* @__PURE__ */ k(T.Provider, { value: e, children: B.children }),
61
- l && y === "single" && typeof n == "string" ? /* @__PURE__ */ k("input", { type: "hidden", name: l, value: n }) : null,
62
- l && y === "multiple" && Array.isArray(n) ? n.map((t) => /* @__PURE__ */ k("input", { type: "hidden", name: l + "[]", value: t }, t)) : null
57
+ [l, k, V, c, x, u, e, d, n]
58
+ ), I = x;
59
+ return /* @__PURE__ */ E("div", { className: z, "data-disabled": l ? "" : void 0, "data-layout": w, "data-orientation": u, "data-size": b, "data-slot": f, "data-variant": D, role: "group", ...G, children: [
60
+ /* @__PURE__ */ B(T.Provider, { value: h, children: C.children }),
61
+ I && d === "single" && typeof n == "string" ? /* @__PURE__ */ B("input", { type: "hidden", name: I, value: n }) : null,
62
+ I && d === "multiple" && Array.isArray(n) ? n.map((t) => /* @__PURE__ */ B("input", { type: "hidden", name: I + "[]", value: t }, t)) : null
63
63
  ] });
64
- }, W = H(function({ value: r, disabled: d, className: I, children: g, onKeyDown: c, onClick: x, pressed: D, defaultPressed: y, ...C }, z) {
65
- const o = K(T);
66
- if (!o) throw new Error("ToggleGroupItem must be used within ToggleGroup");
67
- const { type: P, orientation: v, groupDisabled: h, setValue: f, isItemPressed: n, itemsSnapshot: b, register: a } = o, w = S(null);
68
- L(z, () => w.current), N(() => a(r, w.current), [a, r]);
69
- const i = n(r), p = u(() => {
70
- if (!(h || d))
71
- if (P === "single") f(i ? "" : r);
64
+ }, W = function({
65
+ ref: z,
66
+ value: r,
67
+ disabled: l,
68
+ className: c,
69
+ children: x,
70
+ onKeyDown: v,
71
+ onClick: u,
72
+ ...d
73
+ }) {
74
+ const a = K(T);
75
+ if (!a) throw new Error("ToggleGroupItem must be used within ToggleGroup");
76
+ const { type: D, orientation: b, groupDisabled: f, setValue: w, isItemPressed: G, itemsSnapshot: p, register: n } = a, m = S(null);
77
+ L(z, () => m.current), N(() => n(r, m.current), [n, r]);
78
+ const o = G(r), g = i(() => {
79
+ if (!(f || l))
80
+ if (D === "single") w(o ? "" : r);
72
81
  else {
73
- const e = o.value, l = i ? e.filter((t) => t !== r) : [...e, r];
74
- f(l);
82
+ const e = a.value, y = o ? e.filter((h) => h !== r) : [...e, r];
83
+ w(y);
75
84
  }
76
- }, [o.value, d, h, i, f, P, r]), V = u(
85
+ }, [a.value, l, f, o, w, D, r]), V = i(
77
86
  (e) => {
78
- if (c && c(e), e.defaultPrevented) return;
87
+ if (v && v(e), e.defaultPrevented) return;
79
88
  if (e.key === " " || e.key === "Enter") {
80
- e.preventDefault(), p();
89
+ e.preventDefault(), g();
81
90
  return;
82
91
  }
83
- const l = b(), t = l.findIndex((m) => m.val === r), s = v === "horizontal" ? "ArrowLeft" : "ArrowUp", A = v === "horizontal" ? "ArrowRight" : "ArrowDown";
84
- e.key === s ? (e.preventDefault(), o.focusItemByIndex(t - 1)) : e.key === A ? (e.preventDefault(), o.focusItemByIndex(t + 1)) : e.key === "Home" ? (e.preventDefault(), o.focusItemByIndex(0)) : e.key === "End" && (e.preventDefault(), o.focusItemByIndex(l.length - 1));
92
+ const y = p(), h = y.findIndex((s) => s.val === r), I = b === "horizontal" ? "ArrowLeft" : "ArrowUp", t = b === "horizontal" ? "ArrowRight" : "ArrowDown";
93
+ e.key === I ? (e.preventDefault(), a.focusItemByIndex(h - 1)) : e.key === t ? (e.preventDefault(), a.focusItemByIndex(h + 1)) : e.key === "Home" ? (e.preventDefault(), a.focusItemByIndex(0)) : e.key === "End" && (e.preventDefault(), a.focusItemByIndex(y.length - 1));
85
94
  },
86
- [o, b, c, v, p, r]
87
- ), G = u(
95
+ [a, p, v, b, g, r]
96
+ ), k = i(
88
97
  (e) => {
89
- x && x(e), !e.defaultPrevented && p();
98
+ u && u(e), !e.defaultPrevented && g();
90
99
  },
91
- [x, p]
100
+ [u, g]
92
101
  );
93
- return /* @__PURE__ */ k("button", { "aria-pressed": i, className: I, "data-disabled": h || d ? "" : void 0, "data-state": i ? "on" : "off", disabled: h || d, onClick: G, onKeyDown: V, ref: w, type: "button", ...C, children: g });
94
- });
102
+ return /* @__PURE__ */ B("button", { "aria-pressed": o, className: c, "data-disabled": f || l ? "" : void 0, "data-state": o ? "on" : "off", disabled: f || l, onClick: k, onKeyDown: V, ref: m, type: "button", ...d, children: x });
103
+ };
95
104
  export {
96
105
  Q as ToggleGroupBase,
97
106
  W as ToggleGroupItemBase
@@ -1,7 +1,7 @@
1
1
  import { ToggleGroupBase, ToggleGroupItemBase } from './ToggleGroupBase';
2
2
  import { toggleVariants, ActiveColor } from '../Toggle/Toggle';
3
3
  import { VariantProps } from 'class-variance-authority';
4
- import { ComponentProps } from 'react';
4
+ import { ComponentProps, Ref } from 'react';
5
5
  export type ToggleGroupItemProps = ComponentProps<typeof ToggleGroupItemBase> & VariantProps<typeof toggleVariants> & {
6
6
  activeColor?: ActiveColor;
7
7
  activeTextColor?: ActiveColor;
@@ -11,5 +11,10 @@ export type ToggleGroupProps = ComponentProps<typeof ToggleGroupBase> & VariantP
11
11
  activeTextColor?: ActiveColor;
12
12
  };
13
13
  export declare const ToggleGroup: ({ className, variant, size, layout, activeColor, activeTextColor, children, ...props }: ToggleGroupProps) => import("react/jsx-runtime").JSX.Element;
14
- export declare const ToggleGroupItem: import('react').ForwardRefExoticComponent<Omit<ToggleGroupItemProps, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
14
+ export declare const ToggleGroupItem: {
15
+ ({ ref, className, children, variant, size, value, layout, activeColor, activeTextColor, style, ...props }: ToggleGroupItemProps & {
16
+ ref?: Ref<HTMLButtonElement>;
17
+ }): import("react/jsx-runtime").JSX.Element;
18
+ displayName: string;
19
+ };
15
20
  //# sourceMappingURL=ToggleGroup.d.ts.map
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  import "./styles/main.css";
3
3
  import { jsx as s } from "react/jsx-runtime";
4
- import { ToggleGroupItemBase as C, ToggleGroupBase as T } from "./ToggleGroup/ToggleGroupBase.js";
4
+ import { ToggleGroupBase as C, ToggleGroupItemBase as T } from "./ToggleGroup/ToggleGroupBase.js";
5
5
  import { getActiveColorStyle as z, toggleVariants as G } from "./Toggle.js";
6
6
  import { cn as c } from "./utils/twUtils.js";
7
- import { createContext as w, forwardRef as h, useContext as A } from "react";
8
- const m = w({
7
+ import { createContext as h, useContext as w } from "react";
8
+ const m = h({
9
9
  size: "default",
10
10
  variant: "default",
11
11
  layout: "default"
12
- }), j = ({ className: r, variant: o, size: e, layout: a, activeColor: l, activeTextColor: d, children: n, ...i }) => /* @__PURE__ */ s(
13
- T,
12
+ }), _ = ({ className: r, variant: o, size: e, layout: a, activeColor: l, activeTextColor: d, children: n, ...i }) => /* @__PURE__ */ s(
13
+ C,
14
14
  {
15
15
  "data-slot": "toggle-group",
16
16
  "data-testid": "spectral-toggle-group",
@@ -18,24 +18,36 @@ const m = w({
18
18
  "data-size": e,
19
19
  "data-layout": a,
20
20
  className: c(
21
- "group/toggle-group [&[data-variant='outline']]:bg-toggle-group-bg flex h-fit w-fit [&[data-layout='expanded']]:w-full items-center rounded-md [&_button:first-of-type]:rounded-l-md [&_button:last-of-type]:rounded-r-md [&[data-variant='outline']]:gap-0.25",
21
+ "group/toggle-group [&[data-variant='outline']]:bg-toggle-group-bg flex h-fit w-fit items-center rounded-md [&_button:first-of-type]:rounded-l-md [&_button:last-of-type]:rounded-r-md [&[data-layout='expanded']]:w-full [&[data-variant='outline']]:gap-0.25",
22
22
  r
23
23
  ),
24
24
  ...i,
25
25
  children: /* @__PURE__ */ s(m.Provider, { value: { variant: o, size: e, layout: a, activeColor: l, activeTextColor: d }, children: n })
26
26
  }
27
- ), I = h(({ className: r, children: o, variant: e, size: a, value: l, layout: d, activeColor: n, activeTextColor: i, style: v, ...f }, y) => {
28
- const t = A(m), g = t.variant ?? e, u = t.size ?? a, p = t.layout ?? d, x = n ?? t.activeColor, b = i ?? t.activeTextColor;
27
+ ), A = ({
28
+ ref: r,
29
+ className: o,
30
+ children: e,
31
+ variant: a,
32
+ size: l,
33
+ value: d,
34
+ layout: n,
35
+ activeColor: i,
36
+ activeTextColor: v,
37
+ style: f,
38
+ ...y
39
+ }) => {
40
+ const t = w(m), g = t.variant ?? a, u = t.size ?? l, p = t.layout ?? n, x = i ?? t.activeColor, b = v ?? t.activeTextColor;
29
41
  return /* @__PURE__ */ s(
30
- C,
42
+ T,
31
43
  {
32
- ref: y,
44
+ ref: r,
33
45
  "data-slot": "toggle-group-item",
34
46
  "data-testid": "spectral-toggle-group-item",
35
47
  "data-variant": g,
36
48
  "data-size": u,
37
49
  "data-layout": p,
38
- value: l,
50
+ value: d,
39
51
  className: c(
40
52
  G({
41
53
  variant: g,
@@ -43,16 +55,16 @@ const m = w({
43
55
  layout: p
44
56
  }),
45
57
  "group data-[variant=outline]:border-togglegroup-border rounded-none shadow-none focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0",
46
- r
58
+ o
47
59
  ),
48
- style: { ...z(x, b), ...v },
49
- ...f,
50
- children: o
60
+ style: { ...z(x, b), ...f },
61
+ ...y,
62
+ children: e
51
63
  }
52
64
  );
53
- });
54
- I.displayName = "ToggleGroupItem";
65
+ };
66
+ A.displayName = "ToggleGroupItem";
55
67
  export {
56
- j as ToggleGroup,
57
- I as ToggleGroupItem
68
+ _ as ToggleGroup,
69
+ A as ToggleGroupItem
58
70
  };