@spark-ui/components 10.0.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 (296) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +19 -0
  4. package/dist/DialogTrigger-5SI4dvpK.d.mts +142 -0
  5. package/dist/DialogTrigger-5SI4dvpK.d.ts +142 -0
  6. package/dist/Input-g0LpWuv0.d.mts +17 -0
  7. package/dist/Input-g0LpWuv0.d.ts +17 -0
  8. package/dist/InputGroup-aoaZxCLk.d.mts +28 -0
  9. package/dist/InputGroup-aoaZxCLk.d.ts +28 -0
  10. package/dist/InputTrailingIcon-BBp7sE6D.d.mts +20 -0
  11. package/dist/InputTrailingIcon-ZZx8PoJy.d.ts +20 -0
  12. package/dist/LabelRequiredIndicator-DRnCzHMU.d.mts +19 -0
  13. package/dist/LabelRequiredIndicator-DRnCzHMU.d.ts +19 -0
  14. package/dist/accordion/index.d.mts +85 -0
  15. package/dist/accordion/index.d.ts +85 -0
  16. package/dist/accordion/index.js +461 -0
  17. package/dist/accordion/index.js.map +1 -0
  18. package/dist/accordion/index.mjs +249 -0
  19. package/dist/accordion/index.mjs.map +1 -0
  20. package/dist/alert-dialog/index.d.mts +119 -0
  21. package/dist/alert-dialog/index.d.ts +119 -0
  22. package/dist/alert-dialog/index.js +1451 -0
  23. package/dist/alert-dialog/index.js.map +1 -0
  24. package/dist/alert-dialog/index.mjs +177 -0
  25. package/dist/alert-dialog/index.mjs.map +1 -0
  26. package/dist/badge/index.d.mts +47 -0
  27. package/dist/badge/index.d.ts +47 -0
  28. package/dist/badge/index.js +122 -0
  29. package/dist/badge/index.js.map +1 -0
  30. package/dist/badge/index.mjs +95 -0
  31. package/dist/badge/index.mjs.map +1 -0
  32. package/dist/breadcrumb/index.d.mts +64 -0
  33. package/dist/breadcrumb/index.d.ts +64 -0
  34. package/dist/breadcrumb/index.js +326 -0
  35. package/dist/breadcrumb/index.js.map +1 -0
  36. package/dist/breadcrumb/index.mjs +149 -0
  37. package/dist/breadcrumb/index.mjs.map +1 -0
  38. package/dist/button/index.d.mts +40 -0
  39. package/dist/button/index.d.ts +40 -0
  40. package/dist/button/index.js +877 -0
  41. package/dist/button/index.js.map +1 -0
  42. package/dist/button/index.mjs +10 -0
  43. package/dist/button/index.mjs.map +1 -0
  44. package/dist/carousel/index.d.mts +253 -0
  45. package/dist/carousel/index.d.ts +253 -0
  46. package/dist/carousel/index.js +1678 -0
  47. package/dist/carousel/index.js.map +1 -0
  48. package/dist/carousel/index.mjs +716 -0
  49. package/dist/carousel/index.mjs.map +1 -0
  50. package/dist/checkbox/index.d.mts +120 -0
  51. package/dist/checkbox/index.d.ts +120 -0
  52. package/dist/checkbox/index.js +873 -0
  53. package/dist/checkbox/index.js.map +1 -0
  54. package/dist/checkbox/index.mjs +349 -0
  55. package/dist/checkbox/index.mjs.map +1 -0
  56. package/dist/chip/index.d.mts +97 -0
  57. package/dist/chip/index.d.ts +97 -0
  58. package/dist/chip/index.js +905 -0
  59. package/dist/chip/index.js.map +1 -0
  60. package/dist/chip/index.mjs +793 -0
  61. package/dist/chip/index.mjs.map +1 -0
  62. package/dist/chunk-2KPFQEAA.mjs +52 -0
  63. package/dist/chunk-2KPFQEAA.mjs.map +1 -0
  64. package/dist/chunk-4F5DOL57.mjs +26 -0
  65. package/dist/chunk-4F5DOL57.mjs.map +1 -0
  66. package/dist/chunk-6JOA37TZ.mjs +742 -0
  67. package/dist/chunk-6JOA37TZ.mjs.map +1 -0
  68. package/dist/chunk-7PMPYEHJ.mjs +379 -0
  69. package/dist/chunk-7PMPYEHJ.mjs.map +1 -0
  70. package/dist/chunk-AESXFMCC.mjs +68 -0
  71. package/dist/chunk-AESXFMCC.mjs.map +1 -0
  72. package/dist/chunk-B42LOFIZ.mjs +308 -0
  73. package/dist/chunk-B42LOFIZ.mjs.map +1 -0
  74. package/dist/chunk-FGOZHKBT.mjs +97 -0
  75. package/dist/chunk-FGOZHKBT.mjs.map +1 -0
  76. package/dist/chunk-HLXYG643.mjs +52 -0
  77. package/dist/chunk-HLXYG643.mjs.map +1 -0
  78. package/dist/chunk-JKNBJHD5.mjs +601 -0
  79. package/dist/chunk-JKNBJHD5.mjs.map +1 -0
  80. package/dist/chunk-K7VP7DH3.mjs +66 -0
  81. package/dist/chunk-K7VP7DH3.mjs.map +1 -0
  82. package/dist/chunk-MUNDKRAE.mjs +80 -0
  83. package/dist/chunk-MUNDKRAE.mjs.map +1 -0
  84. package/dist/chunk-NBZKMCHF.mjs +36 -0
  85. package/dist/chunk-NBZKMCHF.mjs.map +1 -0
  86. package/dist/chunk-PZWESKAR.mjs +314 -0
  87. package/dist/chunk-PZWESKAR.mjs.map +1 -0
  88. package/dist/collapsible/index.d.mts +60 -0
  89. package/dist/collapsible/index.d.ts +60 -0
  90. package/dist/collapsible/index.js +140 -0
  91. package/dist/collapsible/index.js.map +1 -0
  92. package/dist/collapsible/index.mjs +8 -0
  93. package/dist/collapsible/index.mjs.map +1 -0
  94. package/dist/combobox/index.d.mts +285 -0
  95. package/dist/combobox/index.d.ts +285 -0
  96. package/dist/combobox/index.js +2920 -0
  97. package/dist/combobox/index.js.map +1 -0
  98. package/dist/combobox/index.mjs +1267 -0
  99. package/dist/combobox/index.mjs.map +1 -0
  100. package/dist/dialog/index.d.mts +33 -0
  101. package/dist/dialog/index.d.ts +33 -0
  102. package/dist/dialog/index.js +1286 -0
  103. package/dist/dialog/index.js.map +1 -0
  104. package/dist/dialog/index.mjs +13 -0
  105. package/dist/dialog/index.mjs.map +1 -0
  106. package/dist/divider/index.d.mts +61 -0
  107. package/dist/divider/index.d.ts +61 -0
  108. package/dist/divider/index.js +223 -0
  109. package/dist/divider/index.js.map +1 -0
  110. package/dist/divider/index.mjs +196 -0
  111. package/dist/divider/index.mjs.map +1 -0
  112. package/dist/drawer/index.d.mts +148 -0
  113. package/dist/drawer/index.d.ts +148 -0
  114. package/dist/drawer/index.js +1266 -0
  115. package/dist/drawer/index.js.map +1 -0
  116. package/dist/drawer/index.mjs +299 -0
  117. package/dist/drawer/index.mjs.map +1 -0
  118. package/dist/dropdown/index.d.mts +233 -0
  119. package/dist/dropdown/index.d.ts +233 -0
  120. package/dist/dropdown/index.js +2402 -0
  121. package/dist/dropdown/index.js.map +1 -0
  122. package/dist/dropdown/index.mjs +741 -0
  123. package/dist/dropdown/index.mjs.map +1 -0
  124. package/dist/form-field/index.d.mts +176 -0
  125. package/dist/form-field/index.d.ts +176 -0
  126. package/dist/form-field/index.js +540 -0
  127. package/dist/form-field/index.js.map +1 -0
  128. package/dist/form-field/index.mjs +13 -0
  129. package/dist/form-field/index.mjs.map +1 -0
  130. package/dist/icon/index.d.mts +28 -0
  131. package/dist/icon/index.d.ts +28 -0
  132. package/dist/icon/index.js +127 -0
  133. package/dist/icon/index.js.map +1 -0
  134. package/dist/icon/index.mjs +9 -0
  135. package/dist/icon/index.mjs.map +1 -0
  136. package/dist/icon-button/index.d.mts +16 -0
  137. package/dist/icon-button/index.d.ts +16 -0
  138. package/dist/icon-button/index.js +921 -0
  139. package/dist/icon-button/index.js.map +1 -0
  140. package/dist/icon-button/index.mjs +11 -0
  141. package/dist/icon-button/index.mjs.map +1 -0
  142. package/dist/input/index.d.mts +78 -0
  143. package/dist/input/index.d.ts +78 -0
  144. package/dist/input/index.js +1119 -0
  145. package/dist/input/index.js.map +1 -0
  146. package/dist/input/index.mjs +16 -0
  147. package/dist/input/index.mjs.map +1 -0
  148. package/dist/kbd/index.d.mts +9 -0
  149. package/dist/kbd/index.d.ts +9 -0
  150. package/dist/kbd/index.js +46 -0
  151. package/dist/kbd/index.js.map +1 -0
  152. package/dist/kbd/index.mjs +19 -0
  153. package/dist/kbd/index.mjs.map +1 -0
  154. package/dist/label/index.d.mts +11 -0
  155. package/dist/label/index.d.ts +11 -0
  156. package/dist/label/index.js +78 -0
  157. package/dist/label/index.js.map +1 -0
  158. package/dist/label/index.mjs +7 -0
  159. package/dist/label/index.mjs.map +1 -0
  160. package/dist/link-box/index.d.mts +34 -0
  161. package/dist/link-box/index.d.ts +34 -0
  162. package/dist/link-box/index.js +92 -0
  163. package/dist/link-box/index.js.map +1 -0
  164. package/dist/link-box/index.mjs +58 -0
  165. package/dist/link-box/index.mjs.map +1 -0
  166. package/dist/pagination/index.d.mts +143 -0
  167. package/dist/pagination/index.d.ts +143 -0
  168. package/dist/pagination/index.js +1303 -0
  169. package/dist/pagination/index.js.map +1 -0
  170. package/dist/pagination/index.mjs +326 -0
  171. package/dist/pagination/index.mjs.map +1 -0
  172. package/dist/popover/index.d.mts +93 -0
  173. package/dist/popover/index.d.ts +93 -0
  174. package/dist/popover/index.js +1280 -0
  175. package/dist/popover/index.js.map +1 -0
  176. package/dist/popover/index.mjs +13 -0
  177. package/dist/popover/index.mjs.map +1 -0
  178. package/dist/portal/index.d.mts +13 -0
  179. package/dist/portal/index.d.ts +13 -0
  180. package/dist/portal/index.js +37 -0
  181. package/dist/portal/index.js.map +1 -0
  182. package/dist/portal/index.mjs +10 -0
  183. package/dist/portal/index.mjs.map +1 -0
  184. package/dist/progress/index.d.mts +48 -0
  185. package/dist/progress/index.d.ts +48 -0
  186. package/dist/progress/index.js +201 -0
  187. package/dist/progress/index.js.map +1 -0
  188. package/dist/progress/index.mjs +174 -0
  189. package/dist/progress/index.mjs.map +1 -0
  190. package/dist/progress-tracker/index.d.mts +81 -0
  191. package/dist/progress-tracker/index.d.ts +81 -0
  192. package/dist/progress-tracker/index.js +834 -0
  193. package/dist/progress-tracker/index.js.map +1 -0
  194. package/dist/progress-tracker/index.mjs +716 -0
  195. package/dist/progress-tracker/index.mjs.map +1 -0
  196. package/dist/radio-group/index.d.mts +100 -0
  197. package/dist/radio-group/index.d.ts +100 -0
  198. package/dist/radio-group/index.js +824 -0
  199. package/dist/radio-group/index.js.map +1 -0
  200. package/dist/radio-group/index.mjs +297 -0
  201. package/dist/radio-group/index.mjs.map +1 -0
  202. package/dist/rating/index.d.mts +78 -0
  203. package/dist/rating/index.d.ts +78 -0
  204. package/dist/rating/index.js +362 -0
  205. package/dist/rating/index.js.map +1 -0
  206. package/dist/rating/index.mjs +247 -0
  207. package/dist/rating/index.mjs.map +1 -0
  208. package/dist/scrolling-list/index.d.mts +105 -0
  209. package/dist/scrolling-list/index.d.ts +105 -0
  210. package/dist/scrolling-list/index.js +1367 -0
  211. package/dist/scrolling-list/index.js.map +1 -0
  212. package/dist/scrolling-list/index.mjs +407 -0
  213. package/dist/scrolling-list/index.mjs.map +1 -0
  214. package/dist/select/index.d.mts +167 -0
  215. package/dist/select/index.d.ts +167 -0
  216. package/dist/select/index.js +991 -0
  217. package/dist/select/index.js.map +1 -0
  218. package/dist/select/index.mjs +470 -0
  219. package/dist/select/index.mjs.map +1 -0
  220. package/dist/skeleton/index.d.mts +67 -0
  221. package/dist/skeleton/index.d.ts +67 -0
  222. package/dist/skeleton/index.js +206 -0
  223. package/dist/skeleton/index.js.map +1 -0
  224. package/dist/skeleton/index.mjs +147 -0
  225. package/dist/skeleton/index.mjs.map +1 -0
  226. package/dist/slider/index.d.mts +97 -0
  227. package/dist/slider/index.d.ts +97 -0
  228. package/dist/slider/index.js +209 -0
  229. package/dist/slider/index.js.map +1 -0
  230. package/dist/slider/index.mjs +182 -0
  231. package/dist/slider/index.mjs.map +1 -0
  232. package/dist/slot/index.d.mts +17 -0
  233. package/dist/slot/index.d.ts +17 -0
  234. package/dist/slot/index.js +51 -0
  235. package/dist/slot/index.js.map +1 -0
  236. package/dist/slot/index.mjs +11 -0
  237. package/dist/slot/index.mjs.map +1 -0
  238. package/dist/snackbar/index.d.mts +158 -0
  239. package/dist/snackbar/index.d.ts +158 -0
  240. package/dist/snackbar/index.js +1693 -0
  241. package/dist/snackbar/index.js.map +1 -0
  242. package/dist/snackbar/index.mjs +733 -0
  243. package/dist/snackbar/index.mjs.map +1 -0
  244. package/dist/spinner/index.d.mts +21 -0
  245. package/dist/spinner/index.d.ts +21 -0
  246. package/dist/spinner/index.js +139 -0
  247. package/dist/spinner/index.js.map +1 -0
  248. package/dist/spinner/index.mjs +9 -0
  249. package/dist/spinner/index.mjs.map +1 -0
  250. package/dist/stepper/index.d.mts +82 -0
  251. package/dist/stepper/index.d.ts +82 -0
  252. package/dist/stepper/index.js +2178 -0
  253. package/dist/stepper/index.js.map +1 -0
  254. package/dist/stepper/index.mjs +229 -0
  255. package/dist/stepper/index.mjs.map +1 -0
  256. package/dist/switch/index.d.mts +64 -0
  257. package/dist/switch/index.d.ts +64 -0
  258. package/dist/switch/index.js +768 -0
  259. package/dist/switch/index.js.map +1 -0
  260. package/dist/switch/index.mjs +245 -0
  261. package/dist/switch/index.mjs.map +1 -0
  262. package/dist/tabs/index.d.mts +103 -0
  263. package/dist/tabs/index.d.ts +103 -0
  264. package/dist/tabs/index.js +1315 -0
  265. package/dist/tabs/index.js.map +1 -0
  266. package/dist/tabs/index.mjs +391 -0
  267. package/dist/tabs/index.mjs.map +1 -0
  268. package/dist/tag/index.d.mts +27 -0
  269. package/dist/tag/index.d.ts +27 -0
  270. package/dist/tag/index.js +269 -0
  271. package/dist/tag/index.js.map +1 -0
  272. package/dist/tag/index.mjs +237 -0
  273. package/dist/tag/index.mjs.map +1 -0
  274. package/dist/text-link/index.d.mts +20 -0
  275. package/dist/text-link/index.d.ts +20 -0
  276. package/dist/text-link/index.js +99 -0
  277. package/dist/text-link/index.js.map +1 -0
  278. package/dist/text-link/index.mjs +8 -0
  279. package/dist/text-link/index.mjs.map +1 -0
  280. package/dist/textarea/index.d.mts +47 -0
  281. package/dist/textarea/index.d.ts +47 -0
  282. package/dist/textarea/index.js +1180 -0
  283. package/dist/textarea/index.js.map +1 -0
  284. package/dist/textarea/index.mjs +77 -0
  285. package/dist/textarea/index.mjs.map +1 -0
  286. package/dist/visually-hidden/index.d.mts +16 -0
  287. package/dist/visually-hidden/index.d.ts +16 -0
  288. package/dist/visually-hidden/index.js +67 -0
  289. package/dist/visually-hidden/index.js.map +1 -0
  290. package/dist/visually-hidden/index.mjs +8 -0
  291. package/dist/visually-hidden/index.mjs.map +1 -0
  292. package/global.d.ts +12 -0
  293. package/package.json +75 -0
  294. package/tsconfig.build.json +9 -0
  295. package/tsconfig.json +9 -0
  296. package/tsup.config.ts +11 -0
@@ -0,0 +1,991 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/select/index.ts
21
+ var select_exports = {};
22
+ __export(select_exports, {
23
+ Select: () => Select2,
24
+ SelectProvider: () => SelectProvider,
25
+ useSelectContext: () => useSelectContext
26
+ });
27
+ module.exports = __toCommonJS(select_exports);
28
+
29
+ // src/select/SelectContext.tsx
30
+ var import_use_combined_state = require("@spark-ui/use-combined-state");
31
+ var import_react9 = require("react");
32
+
33
+ // src/form-field/FormField.tsx
34
+ var import_class_variance_authority = require("class-variance-authority");
35
+ var import_react4 = require("react");
36
+
37
+ // src/slot/Slot.tsx
38
+ var import_radix_ui = require("radix-ui");
39
+ var import_react = require("react");
40
+ var import_jsx_runtime = require("react/jsx-runtime");
41
+ var Slottable = import_radix_ui.Slot.Slottable;
42
+ var Slot = ({ ref, ...props }) => {
43
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radix_ui.Slot.Root, { ref, ...props });
44
+ };
45
+
46
+ // src/form-field/FormFieldContext.tsx
47
+ var import_react2 = require("react");
48
+ var FormFieldContext = (0, import_react2.createContext)(null);
49
+ var ID_PREFIX = ":form-field";
50
+ var useFormField = () => {
51
+ const context = (0, import_react2.useContext)(FormFieldContext);
52
+ if (!context) {
53
+ throw Error("useFormField must be used within a FormField provider");
54
+ }
55
+ return context;
56
+ };
57
+
58
+ // src/form-field/FormFieldProvider.tsx
59
+ var import_react3 = require("react");
60
+ var import_jsx_runtime2 = require("react/jsx-runtime");
61
+ var FormFieldProvider = ({
62
+ id,
63
+ name,
64
+ disabled = false,
65
+ readOnly = false,
66
+ state,
67
+ isRequired,
68
+ children
69
+ }) => {
70
+ const labelId = `${ID_PREFIX}-label-${(0, import_react3.useId)()}`;
71
+ const [messageIds, setMessageIds] = (0, import_react3.useState)([]);
72
+ const description = messageIds.length > 0 ? messageIds.join(" ") : void 0;
73
+ const handleMessageIdAdd = (0, import_react3.useCallback)((msgId) => {
74
+ setMessageIds((ids) => [...ids, msgId]);
75
+ }, []);
76
+ const handleMessageIdRemove = (0, import_react3.useCallback)((msgId) => {
77
+ setMessageIds((ids) => ids.filter((current) => current !== msgId));
78
+ }, []);
79
+ const value = (0, import_react3.useMemo)(() => {
80
+ const isInvalid = state === "error";
81
+ return {
82
+ id,
83
+ labelId,
84
+ name,
85
+ disabled,
86
+ readOnly,
87
+ state,
88
+ isRequired,
89
+ isInvalid,
90
+ description,
91
+ onMessageIdAdd: handleMessageIdAdd,
92
+ onMessageIdRemove: handleMessageIdRemove
93
+ };
94
+ }, [
95
+ id,
96
+ labelId,
97
+ name,
98
+ disabled,
99
+ readOnly,
100
+ description,
101
+ state,
102
+ isRequired,
103
+ handleMessageIdAdd,
104
+ handleMessageIdRemove
105
+ ]);
106
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(FormFieldContext.Provider, { value, children });
107
+ };
108
+ FormFieldProvider.displayName = "FormFieldProvider";
109
+
110
+ // src/form-field/FormField.tsx
111
+ var import_jsx_runtime3 = require("react/jsx-runtime");
112
+ var FormField = ({
113
+ className,
114
+ disabled = false,
115
+ readOnly = false,
116
+ name,
117
+ state,
118
+ isRequired = false,
119
+ asChild = false,
120
+ ref,
121
+ ...others
122
+ }) => {
123
+ const id = `${ID_PREFIX}-${(0, import_react4.useId)()}`;
124
+ const Component = asChild ? Slot : "div";
125
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
126
+ FormFieldProvider,
127
+ {
128
+ id,
129
+ name,
130
+ isRequired,
131
+ disabled,
132
+ readOnly,
133
+ state,
134
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
135
+ Component,
136
+ {
137
+ ref,
138
+ "data-spark-component": "form-field",
139
+ className: (0, import_class_variance_authority.cx)(className, "gap-sm flex flex-col"),
140
+ ...others
141
+ }
142
+ )
143
+ }
144
+ );
145
+ };
146
+ FormField.displayName = "FormField";
147
+
148
+ // src/form-field/FormFieldStateMessage.tsx
149
+ var import_AlertOutline = require("@spark-ui/icons/AlertOutline");
150
+ var import_Check = require("@spark-ui/icons/Check");
151
+ var import_WarningOutline = require("@spark-ui/icons/WarningOutline");
152
+ var import_class_variance_authority4 = require("class-variance-authority");
153
+
154
+ // src/icon/Icon.tsx
155
+ var import_react5 = require("react");
156
+
157
+ // src/visually-hidden/VisuallyHidden.tsx
158
+ var import_jsx_runtime4 = require("react/jsx-runtime");
159
+ var VisuallyHidden = ({ asChild = false, ref, ...props }) => {
160
+ const Component = asChild ? Slot : "span";
161
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
162
+ Component,
163
+ {
164
+ ...props,
165
+ ref,
166
+ style: {
167
+ // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss
168
+ position: "absolute",
169
+ border: 0,
170
+ width: 1,
171
+ height: 1,
172
+ padding: 0,
173
+ margin: -1,
174
+ overflow: "hidden",
175
+ clip: "rect(0, 0, 0, 0)",
176
+ whiteSpace: "nowrap",
177
+ wordWrap: "normal",
178
+ ...props.style
179
+ }
180
+ }
181
+ );
182
+ };
183
+ VisuallyHidden.displayName = "VisuallyHidden";
184
+
185
+ // src/icon/Icon.styles.tsx
186
+ var import_internal_utils = require("@spark-ui/internal-utils");
187
+ var import_class_variance_authority2 = require("class-variance-authority");
188
+ var iconStyles = (0, import_class_variance_authority2.cva)(["fill-current shrink-0"], {
189
+ variants: {
190
+ /**
191
+ * Color scheme of the icon.
192
+ */
193
+ intent: (0, import_internal_utils.makeVariants)({
194
+ current: ["text-current"],
195
+ main: ["text-main"],
196
+ support: ["text-support"],
197
+ accent: ["text-accent"],
198
+ basic: ["text-basic"],
199
+ success: ["text-success"],
200
+ alert: ["text-alert"],
201
+ error: ["text-error"],
202
+ info: ["text-info"],
203
+ neutral: ["text-neutral"]
204
+ }),
205
+ /**
206
+ * Sets the size of the icon.
207
+ */
208
+ size: (0, import_internal_utils.makeVariants)({
209
+ current: ["u-current-font-size"],
210
+ sm: ["w-sz-16", "h-sz-16"],
211
+ md: ["w-sz-24", "h-sz-24"],
212
+ lg: ["w-sz-32", "h-sz-32"],
213
+ xl: ["w-sz-40", "h-sz-40"]
214
+ })
215
+ }
216
+ });
217
+
218
+ // src/icon/Icon.tsx
219
+ var import_jsx_runtime5 = require("react/jsx-runtime");
220
+ var Icon = ({
221
+ label,
222
+ className,
223
+ size = "current",
224
+ intent = "current",
225
+ children,
226
+ ...others
227
+ }) => {
228
+ const child = import_react5.Children.only(children);
229
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
230
+ (0, import_react5.cloneElement)(child, {
231
+ className: iconStyles({ className, size, intent }),
232
+ "data-spark-component": "icon",
233
+ "aria-hidden": "true",
234
+ focusable: "false",
235
+ ...others
236
+ }),
237
+ label && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(VisuallyHidden, { children: label })
238
+ ] });
239
+ };
240
+ Icon.displayName = "Icon";
241
+
242
+ // src/form-field/FormFieldMessage.tsx
243
+ var import_class_variance_authority3 = require("class-variance-authority");
244
+ var import_react6 = require("react");
245
+ var import_jsx_runtime6 = require("react/jsx-runtime");
246
+ var FormFieldMessage = ({
247
+ id: idProp,
248
+ className,
249
+ ref,
250
+ ...others
251
+ }) => {
252
+ const { onMessageIdAdd, onMessageIdRemove } = useFormField();
253
+ const currentId = `${ID_PREFIX}-message-${(0, import_react6.useId)()}`;
254
+ const id = idProp || currentId;
255
+ (0, import_react6.useEffect)(() => {
256
+ onMessageIdAdd(id);
257
+ return () => {
258
+ onMessageIdRemove(id);
259
+ };
260
+ }, [id, onMessageIdAdd, onMessageIdRemove]);
261
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
262
+ "span",
263
+ {
264
+ ref,
265
+ id,
266
+ "data-spark-component": "form-field-message",
267
+ className: (0, import_class_variance_authority3.cx)(className, "text-caption"),
268
+ ...others
269
+ }
270
+ );
271
+ };
272
+ FormFieldMessage.displayName = "FormField.Message";
273
+
274
+ // src/form-field/FormFieldStateMessage.tsx
275
+ var import_jsx_runtime7 = require("react/jsx-runtime");
276
+ var FormFieldStateMessage = ({
277
+ className,
278
+ state,
279
+ children,
280
+ ref,
281
+ ...others
282
+ }) => {
283
+ const field = useFormField();
284
+ if (field.state !== state) {
285
+ return null;
286
+ }
287
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
288
+ FormFieldMessage,
289
+ {
290
+ ref,
291
+ "data-spark-component": "form-field-state-message",
292
+ "aria-live": "polite",
293
+ className: (0, import_class_variance_authority4.cx)(
294
+ "gap-sm flex items-center",
295
+ state === "error" ? "text-error" : "text-on-surface/dim-1",
296
+ className
297
+ ),
298
+ ...others,
299
+ children: [
300
+ state === "alert" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_WarningOutline.WarningOutline, {}) }),
301
+ state === "error" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon, { size: "sm", intent: "error", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_AlertOutline.AlertOutline, {}) }),
302
+ state === "success" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_Check.Check, {}) }),
303
+ children
304
+ ]
305
+ }
306
+ );
307
+ };
308
+ FormFieldStateMessage.displayName = "FormField.StateMessage";
309
+
310
+ // src/form-field/FormFieldAlertMessage.tsx
311
+ var import_jsx_runtime8 = require("react/jsx-runtime");
312
+ var FormFieldAlertMessage = ({ ref, ...props }) => {
313
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
314
+ FormFieldStateMessage,
315
+ {
316
+ ref,
317
+ "data-spark-component": "form-field-alert-message",
318
+ state: "alert",
319
+ ...props
320
+ }
321
+ );
322
+ };
323
+ FormFieldAlertMessage.displayName = "FormField.AlertMessage";
324
+
325
+ // src/form-field/FormFieldCharactersCount.tsx
326
+ var import_class_variance_authority5 = require("class-variance-authority");
327
+ var import_jsx_runtime9 = require("react/jsx-runtime");
328
+ var FormFieldCharactersCount = ({
329
+ className,
330
+ value = "",
331
+ maxLength,
332
+ ref,
333
+ ...others
334
+ }) => {
335
+ const displayValue = `${value.length}/${maxLength}`;
336
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
337
+ "span",
338
+ {
339
+ ref,
340
+ "data-spark-component": "form-field-characters-count",
341
+ className: (0, import_class_variance_authority5.cx)(className, "text-caption", "text-neutral"),
342
+ ...others,
343
+ children: displayValue
344
+ }
345
+ );
346
+ };
347
+ FormFieldCharactersCount.displayName = "FormField.CharactersCount";
348
+
349
+ // src/form-field/FormFieldControl.tsx
350
+ var import_react7 = require("react");
351
+ var import_jsx_runtime10 = require("react/jsx-runtime");
352
+ var useFormFieldControl = () => {
353
+ const { id, name, description, disabled, readOnly, state, labelId, isInvalid, isRequired } = (0, import_react7.useContext)(FormFieldContext) || {};
354
+ return {
355
+ id,
356
+ name,
357
+ description,
358
+ disabled,
359
+ readOnly,
360
+ state,
361
+ labelId,
362
+ isInvalid,
363
+ isRequired
364
+ };
365
+ };
366
+ var FormFieldControl = ({ children }) => {
367
+ const props = useFormFieldControl();
368
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: children(props) });
369
+ };
370
+ FormFieldControl.displayName = "FormField.Control";
371
+
372
+ // src/form-field/FormFieldErrorMessage.tsx
373
+ var import_jsx_runtime11 = require("react/jsx-runtime");
374
+ var FormFieldErrorMessage = ({ ref, ...props }) => {
375
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
376
+ FormFieldStateMessage,
377
+ {
378
+ ref,
379
+ "data-spark-component": "form-field-error-message",
380
+ state: "error",
381
+ ...props
382
+ }
383
+ );
384
+ };
385
+ FormFieldErrorMessage.displayName = "FormField.ErrorMessage";
386
+
387
+ // src/form-field/FormFieldHelperMessage.tsx
388
+ var import_class_variance_authority6 = require("class-variance-authority");
389
+ var import_jsx_runtime12 = require("react/jsx-runtime");
390
+ var FormFieldHelperMessage = ({
391
+ className,
392
+ ref,
393
+ ...others
394
+ }) => {
395
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
396
+ FormFieldMessage,
397
+ {
398
+ ref,
399
+ "data-spark-component": "form-field-helper-message",
400
+ className: (0, import_class_variance_authority6.cx)("text-on-surface/dim-1", className),
401
+ ...others
402
+ }
403
+ );
404
+ };
405
+ FormFieldHelperMessage.displayName = "FormField.HelperMessage";
406
+
407
+ // src/form-field/FormFieldLabel.tsx
408
+ var import_class_variance_authority10 = require("class-variance-authority");
409
+
410
+ // src/label/Label.tsx
411
+ var import_class_variance_authority7 = require("class-variance-authority");
412
+ var import_radix_ui2 = require("radix-ui");
413
+ var import_jsx_runtime13 = require("react/jsx-runtime");
414
+ var Label = ({ className, ref, ...others }) => {
415
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
416
+ import_radix_ui2.Label.Label,
417
+ {
418
+ ref,
419
+ "data-spark-component": "label",
420
+ className: (0, import_class_variance_authority7.cx)("text-body-1", className),
421
+ ...others
422
+ }
423
+ );
424
+ };
425
+ Label.displayName = "Label";
426
+
427
+ // src/label/LabelRequiredIndicator.tsx
428
+ var import_class_variance_authority8 = require("class-variance-authority");
429
+ var import_jsx_runtime14 = require("react/jsx-runtime");
430
+ var LabelRequiredIndicator = ({
431
+ className,
432
+ children = "*",
433
+ ref,
434
+ ...others
435
+ }) => {
436
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
437
+ "span",
438
+ {
439
+ ref,
440
+ "data-spark-component": "label-required-indicator",
441
+ role: "presentation",
442
+ "aria-hidden": "true",
443
+ className: (0, import_class_variance_authority8.cx)(className, "text-caption text-on-surface/dim-1"),
444
+ ...others,
445
+ children
446
+ }
447
+ );
448
+ };
449
+ LabelRequiredIndicator.displayName = "Label.RequiredIndicator";
450
+
451
+ // src/label/index.ts
452
+ var Label2 = Object.assign(Label, {
453
+ RequiredIndicator: LabelRequiredIndicator
454
+ });
455
+ Label2.displayName = "Label";
456
+ LabelRequiredIndicator.displayName = "Label.RequiredIndicator";
457
+
458
+ // src/form-field/FormFieldRequiredIndicator.tsx
459
+ var import_class_variance_authority9 = require("class-variance-authority");
460
+ var import_jsx_runtime15 = require("react/jsx-runtime");
461
+ var FormFieldRequiredIndicator = ({
462
+ className,
463
+ ref,
464
+ ...props
465
+ }) => {
466
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Label2.RequiredIndicator, { ref, className: (0, import_class_variance_authority9.cx)("ml-sm", className), ...props });
467
+ };
468
+ FormFieldRequiredIndicator.displayName = "FormField.RequiredIndicator";
469
+
470
+ // src/form-field/FormFieldLabel.tsx
471
+ var import_jsx_runtime16 = require("react/jsx-runtime");
472
+ var FormFieldLabel = ({
473
+ htmlFor: htmlForProp,
474
+ className,
475
+ children,
476
+ requiredIndicator = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(FormFieldRequiredIndicator, {}),
477
+ asChild,
478
+ ref,
479
+ ...others
480
+ }) => {
481
+ const control = useFormField();
482
+ const { disabled, labelId, isRequired } = control;
483
+ const htmlFor = asChild ? void 0 : htmlForProp || control.id;
484
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
485
+ Label2,
486
+ {
487
+ ref,
488
+ id: labelId,
489
+ "data-spark-component": "form-field-label",
490
+ htmlFor,
491
+ className: (0, import_class_variance_authority10.cx)(className, disabled ? "text-on-surface/dim-3 pointer-events-none" : void 0),
492
+ asChild,
493
+ ...others,
494
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
495
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Slottable, { children }),
496
+ isRequired && requiredIndicator
497
+ ] })
498
+ }
499
+ );
500
+ };
501
+ FormFieldLabel.displayName = "FormField.Label";
502
+
503
+ // src/form-field/FormFieldSuccessMessage.tsx
504
+ var import_jsx_runtime17 = require("react/jsx-runtime");
505
+ var FormFieldSuccessMessage = ({ ref, ...props }) => {
506
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
507
+ FormFieldStateMessage,
508
+ {
509
+ ref,
510
+ "data-spark-component": "form-field-success-message",
511
+ state: "success",
512
+ ...props
513
+ }
514
+ );
515
+ };
516
+ FormFieldSuccessMessage.displayName = "FormField.SuccessMessage";
517
+
518
+ // src/form-field/index.ts
519
+ var FormField2 = Object.assign(FormField, {
520
+ Label: FormFieldLabel,
521
+ Control: FormFieldControl,
522
+ StateMessage: FormFieldStateMessage,
523
+ SuccessMessage: FormFieldSuccessMessage,
524
+ AlertMessage: FormFieldAlertMessage,
525
+ ErrorMessage: FormFieldErrorMessage,
526
+ HelperMessage: FormFieldHelperMessage,
527
+ RequiredIndicator: FormFieldRequiredIndicator,
528
+ CharactersCount: FormFieldCharactersCount
529
+ });
530
+ FormField2.displayName = "FormField";
531
+ FormFieldLabel.displayName = "FormField.Label";
532
+ FormFieldControl.displayName = "FormField.Control";
533
+ FormFieldStateMessage.displayName = "FormField.StateMessage";
534
+ FormFieldSuccessMessage.displayName = "FormField.SuccessMessage";
535
+ FormFieldAlertMessage.displayName = "FormField.AlertMessage";
536
+ FormFieldErrorMessage.displayName = "FormField.ErrorMessage";
537
+ FormFieldHelperMessage.displayName = "FormField.HelperMessage";
538
+ FormFieldRequiredIndicator.displayName = "FormField.RequiredIndicator";
539
+ FormFieldCharactersCount.displayName = "FormField.CharactersCount";
540
+
541
+ // src/select/utils.ts
542
+ var import_react8 = require("react");
543
+ var findElement = (children) => (name) => {
544
+ const validChildren = import_react8.Children.toArray(children).filter(import_react8.isValidElement);
545
+ return validChildren.find((child) => {
546
+ return getElementDisplayName(child)?.includes(name);
547
+ });
548
+ };
549
+ var getElementDisplayName = (element) => {
550
+ return element ? element.type.displayName : "";
551
+ };
552
+ var getOrderedItems = (children, result = []) => {
553
+ import_react8.Children.forEach(children, (child) => {
554
+ if (!(0, import_react8.isValidElement)(child)) return;
555
+ if (getElementDisplayName(child) === "Select.Item" || getElementDisplayName(child) === "Select.Placeholder") {
556
+ const childProps = child.props;
557
+ result.push({
558
+ value: childProps.value,
559
+ disabled: !!childProps.disabled,
560
+ text: childProps.children
561
+ });
562
+ }
563
+ if (child.props.children) {
564
+ getOrderedItems(child.props.children, result);
565
+ }
566
+ });
567
+ return result;
568
+ };
569
+ var getItemsFromChildren = (children) => {
570
+ const newMap = /* @__PURE__ */ new Map();
571
+ getOrderedItems(children).forEach((itemData) => {
572
+ newMap.set(itemData.value, itemData);
573
+ });
574
+ return newMap;
575
+ };
576
+
577
+ // src/select/SelectContext.tsx
578
+ var import_jsx_runtime18 = require("react/jsx-runtime");
579
+ var SelectContext = (0, import_react9.createContext)(null);
580
+ var ID_PREFIX2 = ":select";
581
+ var SelectProvider = ({
582
+ children,
583
+ defaultValue,
584
+ value: valueProp,
585
+ onValueChange,
586
+ disabled: disabledProp = false,
587
+ readOnly: readOnlyProp = false,
588
+ state: stateProp,
589
+ itemsComponent,
590
+ name: nameProp,
591
+ required: requiredProp
592
+ }) => {
593
+ const [value, setValue] = (0, import_use_combined_state.useCombinedState)(valueProp, defaultValue, onValueChange);
594
+ const [placeholder, setPlaceholder] = (0, import_react9.useState)(void 0);
595
+ const [itemsMap, setItemsMap] = (0, import_react9.useState)(getItemsFromChildren(itemsComponent));
596
+ const [ariaLabel, setAriaLabel] = (0, import_react9.useState)();
597
+ const firstItem = itemsMap.entries().next().value[1];
598
+ const selectedItem = typeof value === "string" ? itemsMap.get(value) : firstItem;
599
+ const isControlled = valueProp != null;
600
+ const field = useFormFieldControl();
601
+ const state = field.state || stateProp;
602
+ const internalFieldID = `${ID_PREFIX2}-field-${(0, import_react9.useId)()}`;
603
+ const fieldId = field.id || internalFieldID;
604
+ const fieldLabelId = field.labelId;
605
+ const disabled = field.disabled ?? disabledProp;
606
+ const readOnly = field.readOnly ?? readOnlyProp;
607
+ const name = field.name ?? nameProp;
608
+ const required = !!(field.isRequired ?? requiredProp);
609
+ (0, import_react9.useEffect)(() => {
610
+ const newMap = getItemsFromChildren(itemsComponent);
611
+ const previousItems = [...itemsMap.values()];
612
+ const newItems = [...newMap.values()];
613
+ const hasItemsChanges = previousItems.length !== newItems.length || previousItems.some((item, index) => {
614
+ const hasUpdatedValue = item.value !== newItems[index]?.value;
615
+ const hasUpdatedText = item.text !== newItems[index]?.text;
616
+ return hasUpdatedValue || hasUpdatedText;
617
+ });
618
+ if (hasItemsChanges) {
619
+ setItemsMap(newMap);
620
+ }
621
+ }, [children]);
622
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
623
+ SelectContext.Provider,
624
+ {
625
+ value: {
626
+ disabled,
627
+ readOnly,
628
+ itemsMap,
629
+ state,
630
+ itemsComponent,
631
+ selectedItem,
632
+ setValue,
633
+ isControlled,
634
+ onValueChange,
635
+ ariaLabel,
636
+ setAriaLabel,
637
+ fieldId,
638
+ fieldLabelId,
639
+ name,
640
+ required,
641
+ placeholder,
642
+ setPlaceholder
643
+ },
644
+ children
645
+ }
646
+ );
647
+ };
648
+ var useSelectContext = () => {
649
+ const context = (0, import_react9.useContext)(SelectContext);
650
+ if (!context) {
651
+ throw Error("useSelectContext must be used within a Select provider");
652
+ }
653
+ return context;
654
+ };
655
+
656
+ // src/select/Select.tsx
657
+ var import_jsx_runtime19 = require("react/jsx-runtime");
658
+ var Select = ({ children, ...props }) => {
659
+ const finder = findElement(children);
660
+ const trigger = finder("Trigger");
661
+ const items = finder("Items");
662
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SelectProvider, { ...props, itemsComponent: items, children: trigger });
663
+ };
664
+ Select.displayName = "Select";
665
+
666
+ // src/select/SelectGroup.tsx
667
+ var import_class_variance_authority11 = require("class-variance-authority");
668
+
669
+ // src/select/SelectItemsGroupContext.tsx
670
+ var import_react10 = require("react");
671
+ var import_jsx_runtime20 = require("react/jsx-runtime");
672
+ var SelectGroupContext = (0, import_react10.createContext)(null);
673
+ var SelectGroupProvider = ({ children }) => {
674
+ const [groupLabel, setGroupLabel] = (0, import_react10.useState)("");
675
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SelectGroupContext.Provider, { value: { groupLabel, setGroupLabel }, children });
676
+ };
677
+ var useSelectGroupContext = () => {
678
+ const context = (0, import_react10.useContext)(SelectGroupContext);
679
+ if (!context) {
680
+ throw Error("useSelectGroupContext must be used within a SelectGroup provider");
681
+ }
682
+ return context;
683
+ };
684
+
685
+ // src/select/SelectGroup.tsx
686
+ var import_jsx_runtime21 = require("react/jsx-runtime");
687
+ var Group = ({ children, ref: forwardedRef, ...props }) => {
688
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SelectGroupProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GroupContent, { ref: forwardedRef, ...props, children }) });
689
+ };
690
+ var GroupContent = ({ children, className, ref: forwardedRef }) => {
691
+ const { groupLabel } = useSelectGroupContext();
692
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
693
+ "optgroup",
694
+ {
695
+ "data-spark-component": "select-group",
696
+ ref: forwardedRef,
697
+ className: (0, import_class_variance_authority11.cx)(className),
698
+ label: groupLabel,
699
+ children
700
+ }
701
+ );
702
+ };
703
+ Group.displayName = "Select.Group";
704
+
705
+ // src/select/SelectItem.tsx
706
+ var import_jsx_runtime22 = require("react/jsx-runtime");
707
+ var Item = ({ disabled = false, value, children, ref: forwardedRef }) => {
708
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
709
+ "option",
710
+ {
711
+ "data-spark-component": "select-item",
712
+ ref: forwardedRef,
713
+ value,
714
+ disabled,
715
+ children
716
+ },
717
+ value
718
+ );
719
+ };
720
+ Item.displayName = "Select.Item";
721
+
722
+ // src/select/SelectItems.tsx
723
+ var import_class_variance_authority12 = require("class-variance-authority");
724
+ var import_jsx_runtime23 = require("react/jsx-runtime");
725
+ var styles = (0, import_class_variance_authority12.cva)(
726
+ [
727
+ "absolute left-0 top-0 size-full rounded-lg opacity-0",
728
+ "min-h-sz-44",
729
+ // outline styles
730
+ "ring-1 outline-hidden ring-inset focus:ring-2"
731
+ ],
732
+ {
733
+ variants: {
734
+ state: {
735
+ undefined: "ring-outline focus:ring-outline-high",
736
+ error: "ring-error",
737
+ alert: "ring-alert",
738
+ success: "ring-success"
739
+ },
740
+ disabled: {
741
+ true: "cursor-not-allowed"
742
+ },
743
+ readOnly: {
744
+ true: "cursor-default"
745
+ }
746
+ },
747
+ compoundVariants: [
748
+ {
749
+ disabled: false,
750
+ state: void 0,
751
+ class: "hover:ring-outline-high"
752
+ }
753
+ ]
754
+ }
755
+ );
756
+ var Items = ({
757
+ children,
758
+ className,
759
+ ref,
760
+ ...rest
761
+ }) => {
762
+ const {
763
+ state,
764
+ disabled,
765
+ readOnly,
766
+ ariaLabel,
767
+ fieldLabelId,
768
+ isControlled,
769
+ onValueChange,
770
+ selectedItem,
771
+ setValue,
772
+ name,
773
+ required,
774
+ fieldId
775
+ } = useSelectContext();
776
+ const handleChange = (event) => {
777
+ if (isControlled) {
778
+ event.preventDefault();
779
+ onValueChange?.(event.target.value);
780
+ } else {
781
+ setValue(event.target.value);
782
+ }
783
+ };
784
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
785
+ "select",
786
+ {
787
+ "data-spark-component": "select-items",
788
+ ref,
789
+ disabled: disabled || readOnly,
790
+ name,
791
+ required,
792
+ "aria-labelledby": fieldLabelId,
793
+ ...ariaLabel && { "aria-label": ariaLabel },
794
+ className: styles({ className, state, disabled, readOnly }),
795
+ value: selectedItem?.value,
796
+ onChange: handleChange,
797
+ id: fieldId,
798
+ ...rest,
799
+ children
800
+ }
801
+ );
802
+ };
803
+ Items.displayName = "Select.Items";
804
+
805
+ // src/select/SelectLabel.tsx
806
+ var import_react11 = require("react");
807
+ var Label3 = ({ children }) => {
808
+ const { setGroupLabel } = useSelectGroupContext();
809
+ (0, import_react11.useEffect)(() => {
810
+ setGroupLabel(children);
811
+ }, [children]);
812
+ return null;
813
+ };
814
+ Label3.displayName = "Select.Label";
815
+
816
+ // src/select/SelectLeadingIcon.tsx
817
+ var import_jsx_runtime24 = require("react/jsx-runtime");
818
+ var LeadingIcon = ({ children }) => {
819
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Icon, { size: "sm", className: "shrink-0", children });
820
+ };
821
+ LeadingIcon.displayName = "Select.LeadingIcon";
822
+
823
+ // src/select/SelectPlaceholder.tsx
824
+ var import_react12 = require("react");
825
+ var import_jsx_runtime25 = require("react/jsx-runtime");
826
+ var Placeholder = ({
827
+ disabled = false,
828
+ children,
829
+ ref: forwardedRef
830
+ }) => {
831
+ const { setPlaceholder } = useSelectContext();
832
+ (0, import_react12.useEffect)(() => {
833
+ setPlaceholder(children);
834
+ }, [children]);
835
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
836
+ "option",
837
+ {
838
+ "data-spark-component": "select-placeholder",
839
+ ref: forwardedRef,
840
+ value: "",
841
+ disabled,
842
+ children
843
+ },
844
+ "placeholder"
845
+ );
846
+ };
847
+ Placeholder.displayName = "Select.Placeholder";
848
+
849
+ // src/select/SelectTrigger.tsx
850
+ var import_ArrowHorizontalDown = require("@spark-ui/icons/ArrowHorizontalDown");
851
+ var import_react13 = require("react");
852
+
853
+ // src/select/SelectTrigger.styles.tsx
854
+ var import_class_variance_authority13 = require("class-variance-authority");
855
+ var styles2 = (0, import_class_variance_authority13.cva)(
856
+ [
857
+ "relative flex w-full items-center justify-between",
858
+ "min-h-sz-44 rounded-lg px-lg",
859
+ "text-body-1",
860
+ // outline styles
861
+ "ring-1 outline-hidden ring-inset"
862
+ ],
863
+ {
864
+ variants: {
865
+ state: {
866
+ undefined: "ring-outline",
867
+ error: "ring-error",
868
+ alert: "ring-alert",
869
+ success: "ring-success"
870
+ },
871
+ disabled: {
872
+ false: "focus-within:ring-2"
873
+ },
874
+ readOnly: {
875
+ true: ""
876
+ }
877
+ },
878
+ compoundVariants: [
879
+ {
880
+ readOnly: false,
881
+ disabled: false,
882
+ class: "bg-surface text-on-surface"
883
+ },
884
+ {
885
+ readOnly: true,
886
+ class: "bg-on-surface/dim-5 text-on-surface cursor-default"
887
+ },
888
+ {
889
+ disabled: true,
890
+ class: ["bg-on-surface/dim-5 text-on-surface/dim-3", "cursor-not-allowed"]
891
+ },
892
+ {
893
+ disabled: false,
894
+ state: void 0,
895
+ class: "hover:ring-outline-high focus-within:ring-outline-high"
896
+ }
897
+ ]
898
+ }
899
+ );
900
+
901
+ // src/select/SelectTrigger.tsx
902
+ var import_jsx_runtime26 = require("react/jsx-runtime");
903
+ var Trigger = ({
904
+ "aria-label": ariaLabel,
905
+ children,
906
+ className,
907
+ ref: forwardedRef
908
+ }) => {
909
+ const { disabled, readOnly, state, setAriaLabel, itemsComponent } = useSelectContext();
910
+ (0, import_react13.useEffect)(() => {
911
+ if (ariaLabel) {
912
+ setAriaLabel(ariaLabel);
913
+ }
914
+ }, [ariaLabel]);
915
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
916
+ "div",
917
+ {
918
+ "data-spark-component": "select-trigger",
919
+ ref: forwardedRef,
920
+ className: styles2({ className, state, disabled, readOnly }),
921
+ children: [
922
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "gap-md flex items-center justify-start", children }),
923
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { className: "ml-md shrink-0", size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_ArrowHorizontalDown.ArrowHorizontalDown, {}) }),
924
+ itemsComponent
925
+ ]
926
+ }
927
+ );
928
+ };
929
+ Trigger.displayName = "Select.Trigger";
930
+
931
+ // src/select/SelectValue.tsx
932
+ var import_class_variance_authority14 = require("class-variance-authority");
933
+ var import_jsx_runtime27 = require("react/jsx-runtime");
934
+ var Value = ({
935
+ children,
936
+ className,
937
+ placeholder: customPlaceholder,
938
+ ref: forwardedRef
939
+ }) => {
940
+ const { selectedItem, placeholder, disabled } = useSelectContext();
941
+ const isPlaceholderSelected = selectedItem?.value == null;
942
+ const valuePlaceholder = customPlaceholder || placeholder;
943
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
944
+ "span",
945
+ {
946
+ role: "presentation",
947
+ "data-spark-component": "select-value",
948
+ ref: forwardedRef,
949
+ className: (0, import_class_variance_authority14.cx)("flex shrink items-center text-left", className),
950
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
951
+ "span",
952
+ {
953
+ className: (0, import_class_variance_authority14.cx)(
954
+ "line-clamp-1 flex-1 overflow-hidden break-all text-ellipsis",
955
+ isPlaceholderSelected && !disabled && "text-on-surface/dim-1"
956
+ ),
957
+ children: isPlaceholderSelected ? valuePlaceholder : children || selectedItem?.text
958
+ }
959
+ )
960
+ }
961
+ );
962
+ };
963
+ Value.displayName = "Select.Value";
964
+
965
+ // src/select/index.ts
966
+ var Select2 = Object.assign(Select, {
967
+ Group,
968
+ Item,
969
+ Items,
970
+ Placeholder,
971
+ Label: Label3,
972
+ Trigger,
973
+ Value,
974
+ LeadingIcon
975
+ });
976
+ Select2.displayName = "Select";
977
+ Group.displayName = "Select.Group";
978
+ Items.displayName = "Select.Items";
979
+ Item.displayName = "Select.Item";
980
+ Placeholder.displayName = "Select.Placeholder";
981
+ Label3.displayName = "Select.Label";
982
+ Trigger.displayName = "Select.Trigger";
983
+ Value.displayName = "Select.Value";
984
+ LeadingIcon.displayName = "Select.LeadingIcon";
985
+ // Annotate the CommonJS export names for ESM import in node:
986
+ 0 && (module.exports = {
987
+ Select,
988
+ SelectProvider,
989
+ useSelectContext
990
+ });
991
+ //# sourceMappingURL=index.js.map