@spear-ai/spectral 1.4.1 → 1.4.3

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 (127) hide show
  1. package/dist/Accordion.d.ts +7 -7
  2. package/dist/Accordion.js +53 -51
  3. package/dist/Alert/AlertBase.js +6 -6
  4. package/dist/Alert.js +1 -1
  5. package/dist/Avatar.d.ts +2 -2
  6. package/dist/Avatar.js +46 -46
  7. package/dist/Badge.js +3 -3
  8. package/dist/Button.js +19 -12
  9. package/dist/ButtonGroup/ButtonGroupButton.d.ts +1 -1
  10. package/dist/ButtonGroup/ButtonGroupButton.js +10 -10
  11. package/dist/ButtonGroup.d.ts +8 -5
  12. package/dist/ButtonGroup.js +22 -14
  13. package/dist/ButtonIcon.d.ts +1 -1
  14. package/dist/ButtonIcon.js +5 -5
  15. package/dist/Card.d.ts +1 -1
  16. package/dist/Card.js +10 -10
  17. package/dist/Checkbox/CheckboxBase.d.ts +6 -6
  18. package/dist/Checkbox/CheckboxBase.js +65 -63
  19. package/dist/Checkbox.js +16 -14
  20. package/dist/Dialog/DialogBase.d.ts +37 -25
  21. package/dist/Dialog/DialogBase.js +130 -104
  22. package/dist/Dialog.d.ts +8 -8
  23. package/dist/Dialog.js +46 -36
  24. package/dist/Drawer.js +17 -17
  25. package/dist/HoverCard.d.ts +4 -4
  26. package/dist/HoverCard.js +34 -33
  27. package/dist/Input.js +58 -58
  28. package/dist/InputOTP.d.ts +1 -1
  29. package/dist/InputOTP.js +113 -112
  30. package/dist/MultiSelect/MultiSelectBase.d.ts +16 -16
  31. package/dist/MultiSelect/MultiSelectBase.js +236 -177
  32. package/dist/MultiSelect/MutiSelect.d.ts +6 -4
  33. package/dist/MultiSelect/MutiSelect.js +13 -12
  34. package/dist/Popover.js +2 -1
  35. package/dist/RadioButtonGroup/RadioButtonGroupBase.js +18 -17
  36. package/dist/RadioGroup.js +5 -3
  37. package/dist/Select.js +70 -51
  38. package/dist/Slider.js +8 -4
  39. package/dist/Switch/SwitchBase.d.ts +6 -6
  40. package/dist/Switch/SwitchBase.js +39 -38
  41. package/dist/Switch.js +17 -16
  42. package/dist/Tabs/TabsBase.js +40 -25
  43. package/dist/Tabs.js +18 -21
  44. package/dist/Textarea.d.ts +1 -0
  45. package/dist/Textarea.js +33 -33
  46. package/dist/Toggle.js +4 -4
  47. package/dist/ToggleGroup/ToggleGroupBase.d.ts +7 -7
  48. package/dist/ToggleGroup/ToggleGroupBase.js +64 -64
  49. package/dist/ToggleGroup.js +19 -17
  50. package/dist/Tooltip/TooltipBase.d.ts +8 -8
  51. package/dist/Tooltip/TooltipBase.js +76 -74
  52. package/dist/Tooltip.d.ts +1 -1
  53. package/dist/Tooltip.js +12 -11
  54. package/dist/Tray.d.ts +1 -1
  55. package/dist/Tray.js +4910 -117
  56. package/dist/primitives/input.js +4 -4
  57. package/dist/primitives/select.d.ts +11 -11
  58. package/dist/primitives/select.d.ts.map +1 -1
  59. package/dist/primitives/select.js +28 -21
  60. package/dist/styles/main.css +1 -1
  61. package/dist/utils/{refs.d.ts → createForwardRef.d.ts} +1 -1
  62. package/dist/utils/createForwardRef.d.ts.map +1 -0
  63. package/dist/utils/formFieldUtils.d.ts +22 -18
  64. package/dist/utils/formFieldUtils.d.ts.map +1 -1
  65. package/dist/utils/formFieldUtils.js +46 -46
  66. package/package.json +9 -5
  67. package/dist/analyzer/list.yml.webp +0 -0
  68. package/dist/analyzer/network.webp +0 -0
  69. package/dist/analyzer/sunburst.webp +0 -0
  70. package/dist/analyzer/visual.webp +0 -0
  71. package/dist/auth-background.json +0 -90
  72. package/dist/favicon-invert.svg +0 -5
  73. package/dist/favicon.svg +0 -5
  74. package/dist/features/AuthCard/AuthCard.d.ts +0 -3
  75. package/dist/features/AuthCard/AuthCard.d.ts.map +0 -1
  76. package/dist/features/AuthCard/AuthToggle.d.ts +0 -9
  77. package/dist/features/AuthCard/AuthToggle.d.ts.map +0 -1
  78. package/dist/features/AuthCard/AuthToggle.js +0 -20
  79. package/dist/features/AuthCard/ForgotPasswordEmailForm.d.ts +0 -11
  80. package/dist/features/AuthCard/ForgotPasswordEmailForm.d.ts.map +0 -1
  81. package/dist/features/AuthCard/ForgotPasswordEmailForm.js +0 -86
  82. package/dist/features/AuthCard/ForgotPasswordResetForm.d.ts +0 -11
  83. package/dist/features/AuthCard/ForgotPasswordResetForm.d.ts.map +0 -1
  84. package/dist/features/AuthCard/ForgotPasswordResetForm.js +0 -21
  85. package/dist/features/AuthCard/OTPInput.d.ts +0 -12
  86. package/dist/features/AuthCard/OTPInput.d.ts.map +0 -1
  87. package/dist/features/AuthCard/OTPInput.js +0 -12
  88. package/dist/features/AuthCard/PasswordInput.d.ts +0 -13
  89. package/dist/features/AuthCard/PasswordInput.d.ts.map +0 -1
  90. package/dist/features/AuthCard/PasswordInput.js +0 -93
  91. package/dist/features/AuthCard/SignInForm.d.ts +0 -9
  92. package/dist/features/AuthCard/SignInForm.d.ts.map +0 -1
  93. package/dist/features/AuthCard/SignInForm.js +0 -86
  94. package/dist/features/AuthCard/SignUpForm.d.ts +0 -8
  95. package/dist/features/AuthCard/SignUpForm.d.ts.map +0 -1
  96. package/dist/features/AuthCard/SignUpForm.js +0 -100
  97. package/dist/features/AuthCard.js +0 -202
  98. package/dist/features/ClearDialog/ClearDialog.d.ts +0 -2
  99. package/dist/features/ClearDialog/ClearDialog.d.ts.map +0 -1
  100. package/dist/features/ClearDialog.js +0 -31
  101. package/dist/features/LabelingToolbar/LabelingToolbar.d.ts +0 -8
  102. package/dist/features/LabelingToolbar/LabelingToolbar.d.ts.map +0 -1
  103. package/dist/features/LabelingToolbar.js +0 -13
  104. package/dist/features/LabelingTools/LabelingTools.d.ts +0 -2
  105. package/dist/features/LabelingTools/LabelingTools.d.ts.map +0 -1
  106. package/dist/features/LabelingTools.js +0 -134
  107. package/dist/features/SensorMetadata/SensorMetadata.d.ts +0 -2
  108. package/dist/features/SensorMetadata/SensorMetadata.d.ts.map +0 -1
  109. package/dist/features/SensorMetadata.js +0 -117
  110. package/dist/features/SettingsPopover/SettingsPopover.d.ts +0 -2
  111. package/dist/features/SettingsPopover/SettingsPopover.d.ts.map +0 -1
  112. package/dist/features/SettingsPopover.js +0 -204
  113. package/dist/index-BIpuW_o8.js +0 -146
  114. package/dist/linear-cursor-small.png +0 -0
  115. package/dist/loader-circle-CdRVlFhN.js +0 -11
  116. package/dist/logo/wordmark-dark-side-by-side.svg +0 -6
  117. package/dist/logo/wordmark-light-side-by-side.svg +0 -6
  118. package/dist/message-alert-matte-glass-gradient.webp +0 -0
  119. package/dist/proxy-C9AqCss6.js +0 -4670
  120. package/dist/speech-bubble-fluid-glass-gradient.webp +0 -0
  121. package/dist/themes/grayscale-theme.webp +0 -0
  122. package/dist/themes/green-black-theme.webp +0 -0
  123. package/dist/themes/reverse-grayscale-theme.webp +0 -0
  124. package/dist/themes/viridis-theme.webp +0 -0
  125. package/dist/utils/refs.d.ts.map +0 -1
  126. package/dist/x-Dl66o_vF.js +0 -14
  127. /package/dist/utils/{refs.js → createForwardRef.js} +0 -0
@@ -1,34 +1,35 @@
1
1
  "use client";
2
2
  import "../styles/main.css";
3
- import { jsx as s } from "react/jsx-runtime";
3
+ import { jsx as a } from "react/jsx-runtime";
4
4
  import { Slot as x } from "../primitives/slot.js";
5
5
  import { cn as c } from "../utils/twUtils.js";
6
6
  import { createContext as h, useContext as w } from "react";
7
- const g = h(null), R = ({ value: e, onValueChange: n, children: i, className: o, isKeptActive: r = !1, expanded: t = !1 }) => /* @__PURE__ */ s(g.Provider, { value: { value: e, onValueChange: n, isKeptActive: r, expanded: t }, children: /* @__PURE__ */ s("div", { role: "radiogroup", "data-expanded": t, className: c("flex h-fit w-fit items-center rounded-md [&_button:first-of-type]:rounded-l-md [&_button:last-of-type]:rounded-r-md", "data-[expanded=true]:w-full", o), children: i }) }), _ = ({ value: e, children: n, className: i, disabled: o = !1, asChild: r = !1, onSelect: t }) => {
8
- const a = w(g);
9
- if (!a)
7
+ const u = h(null), R = ({ value: t, onValueChange: n, children: i, className: o, isKeptActive: r = !1, expanded: e = !1 }) => /* @__PURE__ */ a(u.Provider, { value: { value: t, onValueChange: n, isKeptActive: r, expanded: e }, children: /* @__PURE__ */ a("div", { role: "radiogroup", "data-testid": "spectral-radio-button-group", "data-expanded": e, className: c("flex h-fit w-fit items-center rounded-md [&_button:first-of-type]:rounded-l-md [&_button:last-of-type]:rounded-r-md", "data-[expanded=true]:w-full", o), children: i }) }), _ = ({ value: t, children: n, className: i, disabled: o = !1, asChild: r = !1, onSelect: e }) => {
8
+ const s = w(u);
9
+ if (!s)
10
10
  throw new Error("RadioButtonGroupItem must be used within a RadioButtonGroup");
11
- const { value: u, onValueChange: d, isKeptActive: f, expanded: b } = a, l = u === e, v = () => {
12
- o || (d && d(e), t && t(e));
13
- }, p = r ? x : "button", m = {
11
+ const { value: g, onValueChange: d, isKeptActive: b, expanded: f } = s, l = g === t, p = () => {
12
+ o || (d && d(t), e && e(t));
13
+ }, v = r ? x : "button", m = {
14
14
  role: "radio",
15
15
  "aria-checked": l,
16
16
  "data-state": l ? "on" : "off",
17
+ "data-testid": "spectral-radio-button-group-item",
17
18
  disabled: o,
18
- onClick: v,
19
+ onClick: p,
19
20
  className: c(
20
- "bg-toggle-bg inline-flex items-center justify-center gap-2 border text-sm font-medium disabled:pointer-events-none disabled:opacity-50",
21
- "disabled:cursor-not-allowed hover:cursor-pointer text-toggle-text hover:bg-toggle-bg--hover hover:text-toggle-text--hover transition-[colors]",
22
- "[&_svg]:pointer-events-none [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] focus:outline-none",
23
- 'outline-none border-toggle-border hover:border-toggle-border--hover h-9 px-3 min-w-9 [&_svg:not([class*="size-"]):not([width]):not([height])]:size-4',
24
- "rounded-none shadow-none focus:z-10 focus-visible:z-10 [&:not(:first-child)]:border-l-0 active:bg-toggle-bg--active active:text-toggle-text--active",
25
- "active:border-toggle-border--active",
26
- b && "w-full",
27
- f && "data-[state=on]:bg-toggle-bg--active data-[state=on]:text-toggle-text--active data-[state=on]:border-toggle-border--active",
21
+ `bg-toggle-bg inline-flex items-center justify-center gap-2 border text-sm font-medium disabled:pointer-events-none disabled:opacity-50
22
+ disabled:cursor-not-allowed hover:cursor-pointer text-toggle-text hover:bg-toggle-bg--hover hover:text-toggle-text--hover transition-[colors]
23
+ [&_svg]:pointer-events-none [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] focus:outline-none
24
+ outline-none border-toggle-border hover:border-toggle-border--hover h-9 px-3 min-w-9 [&_svg:not([class*='size-']):not([width]):not([height])]:size-4
25
+ rounded-none shadow-none focus:z-10 focus-visible:z-10 [&:not(:first-child)]:border-l-0 active:bg-toggle-bg--active active:text-toggle-text--active
26
+ active:border-toggle-border--active`,
27
+ f && "w-full",
28
+ b && "data-[state=on]:bg-toggle-bg--active data-[state=on]:text-toggle-text--active data-[state=on]:border-toggle-border--active",
28
29
  i
29
30
  )
30
31
  };
31
- return /* @__PURE__ */ s(p, { ...!r && { type: "button" }, ...m, children: n });
32
+ return /* @__PURE__ */ a(v, { ...!r && { type: "button" }, ...m, children: n });
32
33
  };
33
34
  export {
34
35
  R as RadioButtonGroupBase,
@@ -414,10 +414,11 @@ const le = Re({
414
414
  $e,
415
415
  {
416
416
  className: F("flex text-text-primary w-full", r === "vertical" ? "flex-col gap-4" : "flex-row gap-5", i === "unstyled" && "gap-2.5 w-fit", e),
417
- ref: b,
417
+ "data-testid": "spectral-radio-group",
418
+ disabled: f.groupDisabled,
418
419
  onValueChange: o,
420
+ ref: b,
419
421
  value: s,
420
- disabled: f.groupDisabled,
421
422
  ...v
422
423
  }
423
424
  ) });
@@ -428,6 +429,7 @@ const B = he(
428
429
  de,
429
430
  {
430
431
  ref: s,
432
+ "data-testid": "spectral-radio-group-item",
431
433
  className: F(
432
434
  "relative aspect-square h-4.5 w-4.5 rounded-full border-2 border-border-subtle bg-radio-bg ring-black transition-colors cursor-pointer",
433
435
  "hover:border-radio-border--hover focus-visible:ring-1 focus-visible:ring-offset-2",
@@ -458,7 +460,7 @@ const Je = G(({ className: e, children: t, value: o, description: r, disabled: a
458
460
  ] });
459
461
  });
460
462
  Je.displayName = "RadioGroup.Item";
461
- const Qe = G(({ className: e, ...t }, o) => /* @__PURE__ */ n(_, { ref: o, className: F("block text-md font-medium", e), ...t }));
463
+ const Qe = G(({ className: e, ...t }, o) => /* @__PURE__ */ n(_, { ref: o, "data-testid": "spectral-radio-group-label", className: F("block text-md font-medium", e), ...t }));
462
464
  Qe.displayName = "RadioGroup.Label";
463
465
  export {
464
466
  Xe as RadioGroup,
package/dist/Select.js CHANGED
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  import "./styles/main.css";
3
- import { jsxs as r, jsx as e, Fragment as S } from "react/jsx-runtime";
3
+ import { jsxs as r, jsx as e, Fragment as v } from "react/jsx-runtime";
4
4
  import "./Icons/AnalyzeIcon.js";
5
5
  import "./Icons/AnnotationsIcon.js";
6
6
  import "./Icons/ApprovedIcon.js";
7
7
  import "./Icons/CalendarIcon.js";
8
8
  import "./Icons/CheckCircleIcon.js";
9
9
  import "./Icons/CheckSquareIcon.js";
10
- import { CheckmarkIcon as J } from "./Icons/CheckmarkIcon.js";
11
- import { ChevronDownIcon as l } from "./Icons/ChevronDownIcon.js";
10
+ import { CheckmarkIcon as Q } from "./Icons/CheckmarkIcon.js";
11
+ import { ChevronDownIcon as n } from "./Icons/ChevronDownIcon.js";
12
12
  import "./Icons/ChevronUpIcon.js";
13
13
  import "./Icons/ClockIcon.js";
14
14
  import "./Icons/CloseCircleIcon.js";
@@ -32,7 +32,7 @@ import "./Icons/LassoIcon.js";
32
32
  import "./Icons/LineToolIcon.js";
33
33
  import "./Icons/LineToolIcon2.js";
34
34
  import "./Icons/LiveViewIcon.js";
35
- import { LoaderIcon as K } from "./Icons/LoaderIcon.js";
35
+ import { LoaderIcon as W } from "./Icons/LoaderIcon.js";
36
36
  import "./Icons/LocationIcon.js";
37
37
  import "./Icons/LogoutIcon.js";
38
38
  import "./Icons/MessagesIcon.js";
@@ -58,69 +58,88 @@ import "./Icons/WarningIcon.js";
58
58
  import "./Icons/ZoomAllIcon.js";
59
59
  import "./Icons/ZoomXIcon.js";
60
60
  import "./Icons/ZoomYIcon.js";
61
- import { Label as I } from "./Label.js";
62
- import { R as Q, T as W, f as X, e as Y, C as Z, c as _, V as $, S as ee, d as C, G as te, I as re, b as ie, a as oe } from "./index-CevVJ05e.js";
63
- import { useFormFieldId as ae, useFormFieldState as se, getAriaProps as me, getErrorMessageId as de, groupOptions as le, getFormFieldCSSProperties as ne, getStateClasses as pe, getTriggerClasses as ce, ErrorMessage as ue, LoadingState as he, EmptyState as fe, getOptionClasses as ge } from "./utils/formFieldUtils.js";
61
+ import { Label as C } from "./Label.js";
62
+ import { R as X, T as Y, f as Z, e as _, C as $, c as ee, V as te, S as re, d as I, G as ae, I as ie, b as oe, a as se } from "./index-CevVJ05e.js";
63
+ import { useFormFieldId as le, useFormFieldState as de, getAriaProps as me, getErrorMessageId as ne, groupOptions as pe, getFormFieldCSSProperties as ce, getStateClasses as ue, getTriggerClasses as he, ErrorMessage as ge, LoadingState as fe, EmptyState as be, getOptionClasses as xe } from "./utils/formFieldUtils.js";
64
64
  import { cn as o } from "./utils/twUtils.js";
65
- import { forwardRef as be } from "react";
66
- const xe = be(
65
+ import { forwardRef as ye, useState as Ne } from "react";
66
+ const Se = ye(
67
67
  ({
68
68
  align: w = "start",
69
69
  alignOffset: z = 0,
70
70
  className: F,
71
- collisionPadding: j = 10,
72
- defaultValue: k,
73
- emptyMessage: O = "No options found",
74
- errorMessage: n,
71
+ collisionPadding: O = 10,
72
+ defaultValue: j,
73
+ emptyMessage: k = "No options found",
74
+ errorMessage: p,
75
75
  id: L,
76
76
  label: s,
77
- labelClassName: p,
77
+ labelClassName: c,
78
78
  loadingMessage: T = "Loading…",
79
- name: c,
79
+ name: u,
80
80
  onChange: V,
81
- options: u = [],
81
+ options: h = [],
82
82
  placeholder: D = "Select an option",
83
83
  position: E = "popper",
84
84
  side: P = "bottom",
85
85
  sideOffset: R = 4,
86
- state: i = "default",
87
- value: h,
86
+ state: a = "default",
87
+ value: g,
88
88
  "aria-label": q,
89
89
  "aria-describedby": B,
90
- ...m
90
+ ...l
91
91
  }, G) => {
92
- const a = ae(L, c), f = de(a), { isDisabled: g, isLoading: b, isInvalid: x } = se(m.disabled, i), M = me(i, x, f, B), { groups: y, ungrouped: N } = le(u), A = () => {
93
- if (b)
94
- return /* @__PURE__ */ e(he, { message: T });
95
- if (u.length === 0)
96
- return /* @__PURE__ */ e(fe, { message: O });
97
- const v = (t) => {
98
- const d = h === t.value;
99
- return /* @__PURE__ */ r(re, { className: o(ge(d, !1, t.disabled), "relative flex w-full cursor-pointer items-center"), disabled: t.disabled, value: t.value, children: [
100
- /* @__PURE__ */ e(ie, { className: "block truncate", children: t.label }),
101
- /* @__PURE__ */ e(oe, { asChild: !0, children: /* @__PURE__ */ e("span", { className: "absolute right-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ e(J, { size: 16 }) }) })
92
+ const [f, M] = Ne(!1), i = le(L, u), b = ne(i), { isDisabled: d, isLoading: x, isInvalid: A } = de(l.disabled, a), H = me(a, b, B), { groups: y, ungrouped: N } = pe(h), U = () => {
93
+ if (x)
94
+ return /* @__PURE__ */ e(fe, { message: T });
95
+ if (h.length === 0)
96
+ return /* @__PURE__ */ e(be, { message: k });
97
+ const S = (t) => {
98
+ const m = g === t.value;
99
+ return /* @__PURE__ */ r(ie, { className: o(xe(!!t.disabled, !1, m), "relative flex w-full cursor-pointer items-center"), disabled: t.disabled, value: t.value, children: [
100
+ /* @__PURE__ */ e(oe, { className: "block truncate", children: t.label }),
101
+ /* @__PURE__ */ e(se, { asChild: !0, children: /* @__PURE__ */ e("span", { className: "absolute right-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ e(Q, { size: 16 }) }) })
102
102
  ] }, t.value);
103
103
  };
104
- return /* @__PURE__ */ r(S, { children: [
105
- N.length > 0 && /* @__PURE__ */ r(S, { children: [
106
- N.map(v),
107
- Object.keys(y).length > 0 && /* @__PURE__ */ e(C, { className: "-mx-1 my-1 h-px bg-border-secondary" })
104
+ return /* @__PURE__ */ r(v, { children: [
105
+ N.length > 0 && /* @__PURE__ */ r(v, { children: [
106
+ N.map(S),
107
+ Object.keys(y).length > 0 && /* @__PURE__ */ e(I, { className: "-mx-1 my-1 h-px bg-border-secondary" })
108
108
  ] }),
109
- Object.entries(y).map(([t, d], H) => /* @__PURE__ */ r(te, { children: [
110
- H > 0 && /* @__PURE__ */ e(C, { className: "-mx-1 my-1 h-px bg-border-secondary" }),
111
- /* @__PURE__ */ e(I, { htmlFor: a, className: o("px-2 py-1.5 text-base font-semibold text-text-primary", p), children: t }),
112
- d.map((U) => v(U))
109
+ Object.entries(y).map(([t, m], J) => /* @__PURE__ */ r(ae, { children: [
110
+ J > 0 && /* @__PURE__ */ e(I, { className: "-mx-1 my-1 h-px bg-border-secondary" }),
111
+ /* @__PURE__ */ e(C, { htmlFor: i, className: o("px-2 py-1.5 text-base font-semibold text-text-primary", c), children: t }),
112
+ m.map((K) => S(K))
113
113
  ] }, t))
114
114
  ] });
115
115
  };
116
- return /* @__PURE__ */ r("div", { className: "w-full", "data-testid": "select-root", children: [
117
- s && /* @__PURE__ */ e(I, { htmlFor: a, className: o("block mb-4 text-text-primary", p, g && "text-text-secondary"), children: s }),
118
- /* @__PURE__ */ r(Q, { defaultValue: k, disabled: g, name: c, onValueChange: V, required: m.required, value: h, children: [
119
- /* @__PURE__ */ e(W, { "aria-label": q || s, asChild: !0, className: o(ce(i, !1), pe(i), F), "data-state": i, id: a, ref: G, style: ne(), ...M, ...m, children: /* @__PURE__ */ r("button", { type: "button", children: [
120
- /* @__PURE__ */ e(X, { placeholder: D, className: "block truncate" }),
121
- /* @__PURE__ */ e(Y, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "flex items-center", children: b ? /* @__PURE__ */ e(K, { size: 20 }) : /* @__PURE__ */ e(l, { className: "transition-transform duration-200 data-[state=open]:rotate-180", size: 20 }) }) })
122
- ] }) }),
123
- /* @__PURE__ */ e(Z, { align: w, alignOffset: z, asChild: !0, collisionPadding: j, position: E, side: P, sideOffset: R, children: /* @__PURE__ */ r(
116
+ return /* @__PURE__ */ r("div", { className: "w-full", "data-testid": "spectral-select-wrapper", children: [
117
+ s && /* @__PURE__ */ e(C, { "data-testid": "spectral-select-label", htmlFor: i, className: o("block mb-4 text-text-primary", c, d && "text-text-secondary"), children: s }),
118
+ /* @__PURE__ */ r(X, { "data-testid": "spectral-select", defaultValue: j, disabled: d, name: u, onOpenChange: M, onValueChange: V, open: f, required: l.required, value: g, children: [
119
+ /* @__PURE__ */ e(
120
+ Y,
121
+ {
122
+ "aria-controls": i,
123
+ "aria-expanded": f,
124
+ "aria-label": q || s,
125
+ asChild: !0,
126
+ className: o(he(!1, a), ue(a), F),
127
+ "data-slot": "select-trigger",
128
+ "data-state": a,
129
+ "data-testid": "spectral-select-trigger",
130
+ id: i,
131
+ ref: G,
132
+ role: "combobox",
133
+ style: ce(),
134
+ ...H,
135
+ ...l,
136
+ children: /* @__PURE__ */ r("button", { type: "button", disabled: d, children: [
137
+ /* @__PURE__ */ e(Z, { placeholder: D, className: "block truncate" }),
138
+ /* @__PURE__ */ e(_, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "flex items-center", children: x ? /* @__PURE__ */ e(W, { size: 20 }) : /* @__PURE__ */ e(n, { className: "transition-transform duration-200 data-[state=open]:rotate-180", size: 20 }) }) })
139
+ ] })
140
+ }
141
+ ),
142
+ /* @__PURE__ */ e($, { align: w, alignOffset: z, "data-slot": "select-content", "data-testid": "spectral-select-content", asChild: !0, collisionPadding: O, position: E, side: P, sideOffset: R, children: /* @__PURE__ */ r(
124
143
  "div",
125
144
  {
126
145
  className: o(
@@ -140,18 +159,18 @@ const xe = be(
140
159
  width: "var(--radix-select-trigger-width)"
141
160
  },
142
161
  children: [
143
- /* @__PURE__ */ e(_, { className: "flex cursor-default items-center justify-center py-1", children: /* @__PURE__ */ e(l, { className: "rotate-180", size: 18 }) }),
144
- /* @__PURE__ */ e($, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "p-1 max-h-96", style: { position: "relative", overflow: "hidden auto" }, children: A() }) }),
145
- /* @__PURE__ */ e(ee, { className: "flex cursor-default items-center justify-center py-1", children: /* @__PURE__ */ e(l, { size: 18 }) })
162
+ /* @__PURE__ */ e(ee, { className: "flex cursor-default items-center justify-center py-1", children: /* @__PURE__ */ e(n, { className: "rotate-180", size: 18 }) }),
163
+ /* @__PURE__ */ e(te, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "p-1 max-h-96", style: { position: "relative", overflow: "hidden auto" }, children: U() }) }),
164
+ /* @__PURE__ */ e(re, { className: "flex cursor-default items-center justify-center py-1", children: /* @__PURE__ */ e(n, { size: 18 }) })
146
165
  ]
147
166
  }
148
167
  ) })
149
168
  ] }),
150
- x && n && /* @__PURE__ */ e(ue, { id: f, message: n })
169
+ A && p && /* @__PURE__ */ e(ge, { "data-testid": "spectral-select-error-message", id: b, message: p })
151
170
  ] });
152
171
  }
153
172
  );
154
- xe.displayName = "Select";
173
+ Se.displayName = "Select";
155
174
  export {
156
- xe as Select
175
+ Se as Select
157
176
  };
package/dist/Slider.js CHANGED
@@ -6,8 +6,8 @@ import { useMemo as de } from "react";
6
6
  import { c as X } from "./index-rKs9bXHr.js";
7
7
  import { u as ue, c as fe, b as _, P as B, a as C } from "./index-BhufZRa2.js";
8
8
  import { c as me, u as he } from "./index-UEFPWH8U.js";
9
- import { u as Se } from "./index-BZPx6jYI.js";
10
- import { u as pe } from "./index-y6Br5T4h.js";
9
+ import { u as pe } from "./index-BZPx6jYI.js";
10
+ import { u as Se } from "./index-y6Br5T4h.js";
11
11
  import { cn as H } from "./utils/twUtils.js";
12
12
  var G = ["PageUp", "PageDown"], W = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"], q = {
13
13
  "from-left": ["Home", "PageDown", "ArrowDown", "ArrowLeft"],
@@ -305,7 +305,7 @@ var U = "SliderThumb", ie = c.forwardRef(
305
305
  }
306
306
  ), Re = c.forwardRef(
307
307
  (e, t) => {
308
- const { __scopeSlider: o, index: n, name: i, ...l } = e, a = T(U, o), s = ee(U, o), [u, b] = c.useState(null), h = C(t, (D) => b(D)), r = u ? a.form || !!u.closest("form") : !0, d = pe(u), p = a.values[n], R = p === void 0 ? 0 : se(p, a.min, a.max), S = De(n, a.values.length), g = d?.[s.size], f = g ? _e(g, R, s.direction) : 0;
308
+ const { __scopeSlider: o, index: n, name: i, ...l } = e, a = T(U, o), s = ee(U, o), [u, b] = c.useState(null), h = C(t, (D) => b(D)), r = u ? a.form || !!u.closest("form") : !0, d = Se(u), p = a.values[n], R = p === void 0 ? 0 : se(p, a.min, a.max), S = De(n, a.values.length), g = d?.[s.size], f = g ? _e(g, R, s.direction) : 0;
309
309
  return c.useEffect(() => {
310
310
  if (u)
311
311
  return a.thumbs.add(u), () => {
@@ -357,7 +357,7 @@ var U = "SliderThumb", ie = c.forwardRef(
357
357
  ie.displayName = U;
358
358
  var Pe = "RadioBubbleInput", ae = c.forwardRef(
359
359
  ({ __scopeSlider: e, value: t, ...o }, n) => {
360
- const i = c.useRef(null), l = C(i, n), a = Se(t);
360
+ const i = c.useRef(null), l = C(i, n), a = pe(t);
361
361
  return c.useEffect(() => {
362
362
  const s = i.current;
363
363
  if (!s) return;
@@ -428,7 +428,11 @@ const Ye = ({ className: e, defaultValue: t, disabled: o, max: n = 100, min: i =
428
428
  return /* @__PURE__ */ j(
429
429
  Ie,
430
430
  {
431
+ "aria-valuemin": i,
432
+ "aria-valuemax": n,
433
+ "aria-valuenow": p[0],
431
434
  "data-slot": "slider",
435
+ "data-testid": "spectral-slider",
432
436
  defaultValue: t,
433
437
  value: r,
434
438
  min: i,
@@ -4,20 +4,20 @@ type BaseButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'
4
4
  export type SwitchProps = BaseButtonProps & AsChildProp & {
5
5
  checked?: boolean;
6
6
  defaultChecked?: boolean;
7
- onCheckedChange?: (checked: boolean) => void;
7
+ form?: string;
8
8
  name?: string;
9
- value?: string;
9
+ onCheckedChange?: (checked: boolean) => void;
10
10
  required?: boolean;
11
- form?: string;
11
+ value?: string;
12
12
  };
13
13
  export declare const Switch: import('react').ForwardRefExoticComponent<BaseButtonProps & AsChildProp & {
14
14
  checked?: boolean;
15
15
  defaultChecked?: boolean;
16
- onCheckedChange?: (checked: boolean) => void;
16
+ form?: string;
17
17
  name?: string;
18
- value?: string;
18
+ onCheckedChange?: (checked: boolean) => void;
19
19
  required?: boolean;
20
- form?: string;
20
+ value?: string;
21
21
  } & import('react').RefAttributes<HTMLButtonElement>>;
22
22
  export type SwitchThumbProps = HTMLAttributes<HTMLSpanElement> & AsChildProp;
23
23
  export declare const SwitchThumb: import('react').ForwardRefExoticComponent<HTMLAttributes<HTMLSpanElement> & AsChildProp & import('react').RefAttributes<HTMLSpanElement>>;
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  import "../styles/main.css";
3
- import { jsx as h, jsxs as K } from "react/jsx-runtime";
3
+ import { jsx as p, jsxs as K } from "react/jsx-runtime";
4
4
  import { useControllableState as M } from "../hooks/useControllableState.js";
5
5
  import { Slot as g } from "../primitives/slot.js";
6
6
  import { cn as x } from "../utils/twUtils.js";
7
7
  import { createContext as O, forwardRef as y, useRef as V, useId as $, useEffect as k, useCallback as d, useContext as z } from "react";
8
- const C = O(null), A = y(({ asChild: u, className: l, checked: f, defaultChecked: n = !1, onCheckedChange: o, name: m, value: p = "on", required: E, form: S, disabled: r, id: R, onClick: b, onKeyDown: w, children: I, ...N }, P) => {
8
+ const C = O(null), A = y(({ asChild: u, className: l, checked: h, defaultChecked: r = !1, onCheckedChange: o, name: f, value: m = "on", required: E, form: S, disabled: n, id: R, onClick: b, onKeyDown: v, children: I, ...N }, P) => {
9
9
  const c = V(null), T = $(), j = R ?? `swt-${T}`, [t, s] = M({
10
- value: f,
11
- defaultValue: n,
10
+ value: h,
11
+ defaultValue: r,
12
12
  onChange: o
13
13
  });
14
14
  k(() => {
@@ -16,42 +16,33 @@ const C = O(null), A = y(({ asChild: u, className: l, checked: f, defaultChecked
16
16
  }, [t]), k(() => {
17
17
  const e = c.current?.form ?? null;
18
18
  if (!e) return;
19
- const a = () => s(n);
19
+ const a = () => s(r);
20
20
  return e.addEventListener("reset", a), () => e.removeEventListener("reset", a);
21
- }, [n, s]);
22
- const v = d(() => {
21
+ }, [r, s]);
22
+ const w = d(() => {
23
23
  const e = c.current;
24
24
  if (!e) return;
25
25
  e.checked = t;
26
26
  const a = new Event("change", { bubbles: !0 });
27
27
  e.dispatchEvent(a);
28
28
  }, [t]), i = d(() => {
29
- r || (s(!t), queueMicrotask(() => v()));
30
- }, [r, v, t, s]), D = d(
29
+ n || (s(!t), queueMicrotask(() => w()));
30
+ }, [n, w, t, s]), D = d(
31
31
  (e) => {
32
32
  b?.(e), !e.defaultPrevented && i();
33
33
  },
34
34
  [b, i]
35
35
  ), L = d(
36
36
  (e) => {
37
- w?.(e), !e.defaultPrevented && (e.key === " " || e.key === "Enter") && (e.preventDefault(), i());
37
+ v?.(e), !e.defaultPrevented && (e.key === " " || e.key === "Enter") && (e.preventDefault(), i());
38
38
  },
39
- [w, i]
39
+ [v, i]
40
40
  ), q = u ? g : "button", F = P;
41
- return /* @__PURE__ */ h(C.Provider, { value: { checked: t, disabled: r }, children: /* @__PURE__ */ K(
41
+ return /* @__PURE__ */ p(C.Provider, { value: { checked: t, disabled: n }, children: /* @__PURE__ */ K(
42
42
  q,
43
43
  {
44
- id: j,
45
- ref: F,
46
- type: "button",
47
- role: "switch",
48
44
  "aria-checked": t,
49
- "aria-disabled": r || void 0,
50
- "data-state": t ? "checked" : "unchecked",
51
- "data-disabled": r || void 0,
52
- onClick: D,
53
- onKeyDown: L,
54
- disabled: r,
45
+ "aria-disabled": n || void 0,
55
46
  className: x(
56
47
  "peer border-input inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border",
57
48
  "bg-input focus-visible:ring-ring transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",
@@ -59,22 +50,31 @@ const C = O(null), A = y(({ asChild: u, className: l, checked: f, defaultChecked
59
50
  "data-[state=checked]:bg-primary",
60
51
  l
61
52
  ),
53
+ "data-disabled": n || void 0,
54
+ "data-state": t ? "checked" : "unchecked",
55
+ disabled: n,
56
+ id: j,
57
+ onClick: D,
58
+ onKeyDown: L,
59
+ ref: F,
60
+ role: "switch",
61
+ type: "button",
62
62
  ...N,
63
63
  children: [
64
- /* @__PURE__ */ h(
64
+ /* @__PURE__ */ p(
65
65
  "input",
66
66
  {
67
- ref: c,
68
- type: "checkbox",
69
- name: m,
70
- value: p,
71
- required: E,
72
- disabled: r,
73
- form: S,
67
+ "aria-hidden": "true",
74
68
  checked: t,
69
+ disabled: n,
70
+ form: S,
71
+ name: f,
75
72
  readOnly: !0,
73
+ ref: c,
74
+ required: E,
76
75
  tabIndex: -1,
77
- "aria-hidden": "true",
76
+ type: "checkbox",
77
+ value: m,
78
78
  style: {
79
79
  position: "absolute",
80
80
  opacity: 0,
@@ -90,17 +90,18 @@ const C = O(null), A = y(({ asChild: u, className: l, checked: f, defaultChecked
90
90
  ) });
91
91
  });
92
92
  A.displayName = "Switch";
93
- const B = y(({ asChild: u, className: l, ...f }, n) => {
93
+ const B = y(({ asChild: u, className: l, ...h }, r) => {
94
94
  const o = z(C);
95
95
  if (!o) throw new Error("SwitchThumb must be used within Switch");
96
- return /* @__PURE__ */ h(
97
- u ? g : "span",
96
+ const f = u ? g : "span", m = r;
97
+ return /* @__PURE__ */ p(
98
+ f,
98
99
  {
99
- ref: n,
100
- "data-state": o.checked ? "checked" : "unchecked",
101
- "data-disabled": o.disabled || void 0,
102
100
  className: x("bg-background pointer-events-none block h-5 w-5 rounded-full shadow-lg ring-0 transition-transform", "translate-x-0 data-[state=checked]:translate-x-5", l),
103
- ...f
101
+ "data-disabled": o.disabled || void 0,
102
+ "data-state": o.checked ? "checked" : "unchecked",
103
+ ref: m,
104
+ ...h
104
105
  }
105
106
  );
106
107
  });
package/dist/Switch.js CHANGED
@@ -3,39 +3,40 @@ import "./styles/main.css";
3
3
  import { jsxs as w, jsx as t } from "react/jsx-runtime";
4
4
  import { Switch as p, SwitchThumb as k } from "./Switch/SwitchBase.js";
5
5
  import { Label as r } from "./Label.js";
6
- import { cn as c } from "./utils/twUtils.js";
6
+ import { cn as o } from "./utils/twUtils.js";
7
7
  import { forwardRef as x } from "react";
8
- const v = x(({ className: o, disabled: d, id: e, labelPosition: i = "right", labelText: s, name: l, onChange: h, required: b, value: m, hideLabel: a = !1, variant: u, ...f }, g) => {
9
- const n = u === "squared";
10
- return /* @__PURE__ */ w("div", { className: "flex items-center", "data-testid": "switch-container", children: [
11
- i === "left" && !a && /* @__PURE__ */ t(r, { htmlFor: e, className: "mr-2", "data-testid": "switch-label-left", children: s }),
8
+ const v = x(({ className: l, disabled: d, id: e, labelPosition: i = "right", labelText: s, name: h, onChange: b, required: n, value: m, hideLabel: a = !1, variant: u, ...f }, g) => {
9
+ const c = u === "squared";
10
+ return /* @__PURE__ */ w("div", { className: "flex items-center", "data-testid": "spectral-switch-container", children: [
11
+ i === "left" && !a && /* @__PURE__ */ t(r, { htmlFor: e, className: "mr-2", "data-testid": "spectral-switch-label-left", children: s }),
12
12
  /* @__PURE__ */ t(
13
13
  p,
14
14
  {
15
- "data-testid": "switch-root",
16
- className: c(
17
- n ? "peer data-[state=checked]:bg-switch-bg--checked data-[state=unchecked]:bg-switch-bg inline-flex h-6 w-10 shrink-0 items-center rounded-sm border-2 border-transparent transition-all outline-none focus-visible:ring-[3px] focus-visible:ring-black disabled:cursor-not-allowed disabled:opacity-50 [&_span]:rounded-[4px]" : "focus-visible:ring-ring focus-visible:ring-offset-background peer data-[state=checked]:bg-switch-bg--checked data-[state=unchecked]:bg-switch-bg inline-flex h-6 w-10 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-2xs transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",
18
- o
15
+ "aria-required": n,
16
+ className: o(
17
+ c ? "peer data-[state=checked]:bg-switch-bg--checked data-[state=unchecked]:bg-switch-bg inline-flex h-6 w-10 shrink-0 items-center rounded-sm border-2 border-transparent transition-all outline-none focus-visible:ring-[3px] focus-visible:ring-black disabled:cursor-not-allowed disabled:opacity-50 [&_span]:rounded-[4px]" : "focus-visible:ring-ring focus-visible:ring-offset-background peer data-[state=checked]:bg-switch-bg--checked data-[state=unchecked]:bg-switch-bg inline-flex h-6 w-10 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-2xs transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",
18
+ l
19
19
  ),
20
+ "data-testid": "spectral-switch-root",
20
21
  disabled: d,
21
22
  id: e,
22
- name: l,
23
- onCheckedChange: h,
23
+ name: h,
24
+ onCheckedChange: b,
25
+ ref: g,
26
+ required: n,
24
27
  value: m,
25
- required: b,
26
28
  ...f,
27
- ref: g,
28
29
  children: /* @__PURE__ */ t(
29
30
  k,
30
31
  {
31
- className: c(
32
- n ? "bg-switch-thumb pointer-events-none block size-5 rounded-full shadow-xs ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0 data-[state=checked]:rtl:-translate-x-4" : "bg-switch-thumb pointer-events-none block h-5 w-5 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"
32
+ className: o(
33
+ c ? "bg-switch-thumb pointer-events-none block size-5 rounded-full shadow-xs ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0 data-[state=checked]:rtl:-translate-x-4" : "bg-switch-thumb pointer-events-none block h-5 w-5 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"
33
34
  )
34
35
  }
35
36
  )
36
37
  }
37
38
  ),
38
- i === "right" && !a && /* @__PURE__ */ t(r, { htmlFor: e, id: `${e}-label`, className: "ml-2", "data-testid": "switch-label-right", children: s }),
39
+ i === "right" && !a && /* @__PURE__ */ t(r, { htmlFor: e, id: `${e}-label`, className: "ml-2", "data-testid": "spectral-switch-label-right", children: s }),
39
40
  a && /* @__PURE__ */ t(r, { htmlFor: e, className: "sr-only", children: s })
40
41
  ] });
41
42
  });