@spark-ui/components 10.0.2 → 10.0.4

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 (44) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/checkbox/index.js +117 -478
  3. package/dist/checkbox/index.js.map +1 -1
  4. package/dist/checkbox/index.mjs +3 -4
  5. package/dist/checkbox/index.mjs.map +1 -1
  6. package/dist/{chunk-JC6KKYUQ.mjs → chunk-7BTJUYP3.mjs} +6 -5
  7. package/dist/{chunk-JC6KKYUQ.mjs.map → chunk-7BTJUYP3.mjs.map} +1 -1
  8. package/dist/combobox/index.js +301 -710
  9. package/dist/combobox/index.js.map +1 -1
  10. package/dist/combobox/index.mjs +3 -5
  11. package/dist/combobox/index.mjs.map +1 -1
  12. package/dist/dropdown/index.js +252 -662
  13. package/dist/dropdown/index.js.map +1 -1
  14. package/dist/dropdown/index.mjs +1 -4
  15. package/dist/dropdown/index.mjs.map +1 -1
  16. package/dist/form-field/index.mjs +373 -7
  17. package/dist/form-field/index.mjs.map +1 -1
  18. package/dist/input/index.js +47 -454
  19. package/dist/input/index.js.map +1 -1
  20. package/dist/input/index.mjs +1 -3
  21. package/dist/radio-group/index.js +47 -553
  22. package/dist/radio-group/index.js.map +1 -1
  23. package/dist/radio-group/index.mjs +3 -9
  24. package/dist/radio-group/index.mjs.map +1 -1
  25. package/dist/select/index.js +159 -569
  26. package/dist/select/index.js.map +1 -1
  27. package/dist/select/index.mjs +1 -4
  28. package/dist/select/index.mjs.map +1 -1
  29. package/dist/stepper/index.js +110 -516
  30. package/dist/stepper/index.js.map +1 -1
  31. package/dist/stepper/index.mjs +2 -5
  32. package/dist/stepper/index.mjs.map +1 -1
  33. package/dist/switch/index.js +96 -545
  34. package/dist/switch/index.js.map +1 -1
  35. package/dist/switch/index.mjs +3 -6
  36. package/dist/switch/index.mjs.map +1 -1
  37. package/dist/textarea/index.js +58 -465
  38. package/dist/textarea/index.js.map +1 -1
  39. package/dist/textarea/index.mjs +1 -3
  40. package/dist/textarea/index.mjs.map +1 -1
  41. package/package.json +20 -10
  42. package/tsup.config.ts +2 -1
  43. package/dist/chunk-7PMPYEHJ.mjs +0 -379
  44. package/dist/chunk-7PMPYEHJ.mjs.map +0 -1
@@ -26,522 +26,15 @@ __export(select_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(select_exports);
28
28
 
29
- // src/form-field/FormField.tsx
30
- var import_class_variance_authority = require("class-variance-authority");
31
- var import_react4 = require("react");
32
-
33
- // src/slot/Slot.tsx
34
- var import_radix_ui = require("radix-ui");
35
- var import_react = require("react");
36
- var import_jsx_runtime = require("react/jsx-runtime");
37
- var Slottable = import_radix_ui.Slot.Slottable;
38
- var Slot = ({ ref, ...props }) => {
39
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radix_ui.Slot.Root, { ref, ...props });
40
- };
41
-
42
- // src/form-field/FormFieldContext.tsx
43
- var import_react2 = require("react");
44
- var FormFieldContext = (0, import_react2.createContext)(null);
45
- var ID_PREFIX = ":form-field";
46
- var useFormField = () => {
47
- const context = (0, import_react2.useContext)(FormFieldContext);
48
- if (!context) {
49
- throw Error("useFormField must be used within a FormField provider");
50
- }
51
- return context;
52
- };
53
-
54
- // src/form-field/FormFieldProvider.tsx
55
- var import_react3 = require("react");
56
- var import_jsx_runtime2 = require("react/jsx-runtime");
57
- var FormFieldProvider = ({
58
- id,
59
- name,
60
- disabled = false,
61
- readOnly = false,
62
- state,
63
- isRequired,
64
- children
65
- }) => {
66
- const labelId = `${ID_PREFIX}-label-${(0, import_react3.useId)()}`;
67
- const [messageIds, setMessageIds] = (0, import_react3.useState)([]);
68
- const description = messageIds.length > 0 ? messageIds.join(" ") : void 0;
69
- const handleMessageIdAdd = (0, import_react3.useCallback)((msgId) => {
70
- setMessageIds((ids) => [...ids, msgId]);
71
- }, []);
72
- const handleMessageIdRemove = (0, import_react3.useCallback)((msgId) => {
73
- setMessageIds((ids) => ids.filter((current) => current !== msgId));
74
- }, []);
75
- const value = (0, import_react3.useMemo)(() => {
76
- const isInvalid = state === "error";
77
- return {
78
- id,
79
- labelId,
80
- name,
81
- disabled,
82
- readOnly,
83
- state,
84
- isRequired,
85
- isInvalid,
86
- description,
87
- onMessageIdAdd: handleMessageIdAdd,
88
- onMessageIdRemove: handleMessageIdRemove
89
- };
90
- }, [
91
- id,
92
- labelId,
93
- name,
94
- disabled,
95
- readOnly,
96
- description,
97
- state,
98
- isRequired,
99
- handleMessageIdAdd,
100
- handleMessageIdRemove
101
- ]);
102
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(FormFieldContext.Provider, { value, children });
103
- };
104
- FormFieldProvider.displayName = "FormFieldProvider";
105
-
106
- // src/form-field/FormField.tsx
107
- var import_jsx_runtime3 = require("react/jsx-runtime");
108
- var FormField = ({
109
- className,
110
- disabled = false,
111
- readOnly = false,
112
- name,
113
- state,
114
- isRequired = false,
115
- asChild = false,
116
- ref,
117
- ...others
118
- }) => {
119
- const id = `${ID_PREFIX}-${(0, import_react4.useId)()}`;
120
- const Component = asChild ? Slot : "div";
121
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
122
- FormFieldProvider,
123
- {
124
- id,
125
- name,
126
- isRequired,
127
- disabled,
128
- readOnly,
129
- state,
130
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
131
- Component,
132
- {
133
- ref,
134
- "data-spark-component": "form-field",
135
- className: (0, import_class_variance_authority.cx)(className, "gap-sm flex flex-col"),
136
- ...others
137
- }
138
- )
139
- }
140
- );
141
- };
142
- FormField.displayName = "FormField";
143
-
144
- // src/form-field/FormFieldStateMessage.tsx
145
- var import_AlertOutline = require("@spark-ui/icons/AlertOutline");
146
- var import_Check = require("@spark-ui/icons/Check");
147
- var import_WarningOutline = require("@spark-ui/icons/WarningOutline");
148
- var import_class_variance_authority4 = require("class-variance-authority");
149
-
150
- // src/icon/Icon.tsx
151
- var import_react5 = require("react");
152
-
153
- // src/visually-hidden/VisuallyHidden.tsx
154
- var import_jsx_runtime4 = require("react/jsx-runtime");
155
- var VisuallyHidden = ({ asChild = false, ref, ...props }) => {
156
- const Component = asChild ? Slot : "span";
157
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
158
- Component,
159
- {
160
- ...props,
161
- ref,
162
- style: {
163
- // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss
164
- position: "absolute",
165
- border: 0,
166
- width: 1,
167
- height: 1,
168
- padding: 0,
169
- margin: -1,
170
- overflow: "hidden",
171
- clip: "rect(0, 0, 0, 0)",
172
- whiteSpace: "nowrap",
173
- wordWrap: "normal",
174
- ...props.style
175
- }
176
- }
177
- );
178
- };
179
- VisuallyHidden.displayName = "VisuallyHidden";
180
-
181
- // src/icon/Icon.styles.tsx
182
- var import_internal_utils = require("@spark-ui/internal-utils");
183
- var import_class_variance_authority2 = require("class-variance-authority");
184
- var iconStyles = (0, import_class_variance_authority2.cva)(["fill-current shrink-0"], {
185
- variants: {
186
- /**
187
- * Color scheme of the icon.
188
- */
189
- intent: (0, import_internal_utils.makeVariants)({
190
- current: ["text-current"],
191
- main: ["text-main"],
192
- support: ["text-support"],
193
- accent: ["text-accent"],
194
- basic: ["text-basic"],
195
- success: ["text-success"],
196
- alert: ["text-alert"],
197
- error: ["text-error"],
198
- info: ["text-info"],
199
- neutral: ["text-neutral"]
200
- }),
201
- /**
202
- * Sets the size of the icon.
203
- */
204
- size: (0, import_internal_utils.makeVariants)({
205
- current: ["u-current-font-size"],
206
- sm: ["w-sz-16", "h-sz-16"],
207
- md: ["w-sz-24", "h-sz-24"],
208
- lg: ["w-sz-32", "h-sz-32"],
209
- xl: ["w-sz-40", "h-sz-40"]
210
- })
211
- }
212
- });
213
-
214
- // src/icon/Icon.tsx
215
- var import_jsx_runtime5 = require("react/jsx-runtime");
216
- var Icon = ({
217
- label,
218
- className,
219
- size = "current",
220
- intent = "current",
221
- children,
222
- ...others
223
- }) => {
224
- const child = import_react5.Children.only(children);
225
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
226
- (0, import_react5.cloneElement)(child, {
227
- className: iconStyles({ className, size, intent }),
228
- "data-spark-component": "icon",
229
- "aria-hidden": "true",
230
- focusable: "false",
231
- ...others
232
- }),
233
- label && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(VisuallyHidden, { children: label })
234
- ] });
235
- };
236
- Icon.displayName = "Icon";
237
-
238
- // src/form-field/FormFieldMessage.tsx
239
- var import_class_variance_authority3 = require("class-variance-authority");
240
- var import_react6 = require("react");
241
- var import_jsx_runtime6 = require("react/jsx-runtime");
242
- var FormFieldMessage = ({
243
- id: idProp,
244
- className,
245
- ref,
246
- ...others
247
- }) => {
248
- const { onMessageIdAdd, onMessageIdRemove } = useFormField();
249
- const currentId = `${ID_PREFIX}-message-${(0, import_react6.useId)()}`;
250
- const id = idProp || currentId;
251
- (0, import_react6.useEffect)(() => {
252
- onMessageIdAdd(id);
253
- return () => {
254
- onMessageIdRemove(id);
255
- };
256
- }, [id, onMessageIdAdd, onMessageIdRemove]);
257
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
258
- "span",
259
- {
260
- ref,
261
- id,
262
- "data-spark-component": "form-field-message",
263
- className: (0, import_class_variance_authority3.cx)(className, "text-caption"),
264
- ...others
265
- }
266
- );
267
- };
268
- FormFieldMessage.displayName = "FormField.Message";
269
-
270
- // src/form-field/FormFieldStateMessage.tsx
271
- var import_jsx_runtime7 = require("react/jsx-runtime");
272
- var FormFieldStateMessage = ({
273
- className,
274
- state,
275
- children,
276
- ref,
277
- ...others
278
- }) => {
279
- const field = useFormField();
280
- if (field.state !== state) {
281
- return null;
282
- }
283
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
284
- FormFieldMessage,
285
- {
286
- ref,
287
- "data-spark-component": "form-field-state-message",
288
- "aria-live": "polite",
289
- className: (0, import_class_variance_authority4.cx)(
290
- "gap-sm flex items-center",
291
- state === "error" ? "text-error" : "text-on-surface/dim-1",
292
- className
293
- ),
294
- ...others,
295
- children: [
296
- state === "alert" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_WarningOutline.WarningOutline, {}) }),
297
- state === "error" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon, { size: "sm", intent: "error", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_AlertOutline.AlertOutline, {}) }),
298
- state === "success" && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_Check.Check, {}) }),
299
- children
300
- ]
301
- }
302
- );
303
- };
304
- FormFieldStateMessage.displayName = "FormField.StateMessage";
305
-
306
- // src/form-field/FormFieldAlertMessage.tsx
307
- var import_jsx_runtime8 = require("react/jsx-runtime");
308
- var FormFieldAlertMessage = ({ ref, ...props }) => {
309
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
310
- FormFieldStateMessage,
311
- {
312
- ref,
313
- "data-spark-component": "form-field-alert-message",
314
- state: "alert",
315
- ...props
316
- }
317
- );
318
- };
319
- FormFieldAlertMessage.displayName = "FormField.AlertMessage";
320
-
321
- // src/form-field/FormFieldCharactersCount.tsx
322
- var import_class_variance_authority5 = require("class-variance-authority");
323
- var import_jsx_runtime9 = require("react/jsx-runtime");
324
- var FormFieldCharactersCount = ({
325
- className,
326
- value = "",
327
- maxLength,
328
- ref,
329
- ...others
330
- }) => {
331
- const displayValue = `${value.length}/${maxLength}`;
332
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
333
- "span",
334
- {
335
- ref,
336
- "data-spark-component": "form-field-characters-count",
337
- className: (0, import_class_variance_authority5.cx)(className, "text-caption", "text-neutral"),
338
- ...others,
339
- children: displayValue
340
- }
341
- );
342
- };
343
- FormFieldCharactersCount.displayName = "FormField.CharactersCount";
344
-
345
- // src/form-field/FormFieldControl.tsx
346
- var import_react7 = require("react");
347
- var import_jsx_runtime10 = require("react/jsx-runtime");
348
- var useFormFieldControl = () => {
349
- const { id, name, description, disabled, readOnly, state, labelId, isInvalid, isRequired } = (0, import_react7.useContext)(FormFieldContext) || {};
350
- return {
351
- id,
352
- name,
353
- description,
354
- disabled,
355
- readOnly,
356
- state,
357
- labelId,
358
- isInvalid,
359
- isRequired
360
- };
361
- };
362
- var FormFieldControl = ({ children }) => {
363
- const props = useFormFieldControl();
364
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: children(props) });
365
- };
366
- FormFieldControl.displayName = "FormField.Control";
367
-
368
- // src/form-field/FormFieldErrorMessage.tsx
369
- var import_jsx_runtime11 = require("react/jsx-runtime");
370
- var FormFieldErrorMessage = ({ ref, ...props }) => {
371
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
372
- FormFieldStateMessage,
373
- {
374
- ref,
375
- "data-spark-component": "form-field-error-message",
376
- state: "error",
377
- ...props
378
- }
379
- );
380
- };
381
- FormFieldErrorMessage.displayName = "FormField.ErrorMessage";
382
-
383
- // src/form-field/FormFieldHelperMessage.tsx
384
- var import_class_variance_authority6 = require("class-variance-authority");
385
- var import_jsx_runtime12 = require("react/jsx-runtime");
386
- var FormFieldHelperMessage = ({
387
- className,
388
- ref,
389
- ...others
390
- }) => {
391
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
392
- FormFieldMessage,
393
- {
394
- ref,
395
- "data-spark-component": "form-field-helper-message",
396
- className: (0, import_class_variance_authority6.cx)("text-on-surface/dim-1", className),
397
- ...others
398
- }
399
- );
400
- };
401
- FormFieldHelperMessage.displayName = "FormField.HelperMessage";
402
-
403
- // src/form-field/FormFieldLabel.tsx
404
- var import_class_variance_authority10 = require("class-variance-authority");
405
-
406
- // src/label/Label.tsx
407
- var import_class_variance_authority7 = require("class-variance-authority");
408
- var import_radix_ui2 = require("radix-ui");
409
- var import_jsx_runtime13 = require("react/jsx-runtime");
410
- var Label = ({ className, ref, ...others }) => {
411
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
412
- import_radix_ui2.Label.Label,
413
- {
414
- ref,
415
- "data-spark-component": "label",
416
- className: (0, import_class_variance_authority7.cx)("text-body-1", className),
417
- ...others
418
- }
419
- );
420
- };
421
- Label.displayName = "Label";
422
-
423
- // src/label/LabelRequiredIndicator.tsx
424
- var import_class_variance_authority8 = require("class-variance-authority");
425
- var import_jsx_runtime14 = require("react/jsx-runtime");
426
- var LabelRequiredIndicator = ({
427
- className,
428
- children = "*",
429
- ref,
430
- ...others
431
- }) => {
432
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
433
- "span",
434
- {
435
- ref,
436
- "data-spark-component": "label-required-indicator",
437
- role: "presentation",
438
- "aria-hidden": "true",
439
- className: (0, import_class_variance_authority8.cx)(className, "text-caption text-on-surface/dim-1"),
440
- ...others,
441
- children
442
- }
443
- );
444
- };
445
- LabelRequiredIndicator.displayName = "Label.RequiredIndicator";
446
-
447
- // src/label/index.ts
448
- var Label2 = Object.assign(Label, {
449
- RequiredIndicator: LabelRequiredIndicator
450
- });
451
- Label2.displayName = "Label";
452
- LabelRequiredIndicator.displayName = "Label.RequiredIndicator";
453
-
454
- // src/form-field/FormFieldRequiredIndicator.tsx
455
- var import_class_variance_authority9 = require("class-variance-authority");
456
- var import_jsx_runtime15 = require("react/jsx-runtime");
457
- var FormFieldRequiredIndicator = ({
458
- className,
459
- ref,
460
- ...props
461
- }) => {
462
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Label2.RequiredIndicator, { ref, className: (0, import_class_variance_authority9.cx)("ml-sm", className), ...props });
463
- };
464
- FormFieldRequiredIndicator.displayName = "FormField.RequiredIndicator";
465
-
466
- // src/form-field/FormFieldLabel.tsx
467
- var import_jsx_runtime16 = require("react/jsx-runtime");
468
- var FormFieldLabel = ({
469
- htmlFor: htmlForProp,
470
- className,
471
- children,
472
- requiredIndicator = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(FormFieldRequiredIndicator, {}),
473
- asChild,
474
- ref,
475
- ...others
476
- }) => {
477
- const control = useFormField();
478
- const { disabled, labelId, isRequired } = control;
479
- const htmlFor = asChild ? void 0 : htmlForProp || control.id;
480
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
481
- Label2,
482
- {
483
- ref,
484
- id: labelId,
485
- "data-spark-component": "form-field-label",
486
- htmlFor,
487
- className: (0, import_class_variance_authority10.cx)(className, disabled ? "text-on-surface/dim-3 pointer-events-none" : void 0),
488
- asChild,
489
- ...others,
490
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
491
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Slottable, { children }),
492
- isRequired && requiredIndicator
493
- ] })
494
- }
495
- );
496
- };
497
- FormFieldLabel.displayName = "FormField.Label";
498
-
499
- // src/form-field/FormFieldSuccessMessage.tsx
500
- var import_jsx_runtime17 = require("react/jsx-runtime");
501
- var FormFieldSuccessMessage = ({ ref, ...props }) => {
502
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
503
- FormFieldStateMessage,
504
- {
505
- ref,
506
- "data-spark-component": "form-field-success-message",
507
- state: "success",
508
- ...props
509
- }
510
- );
511
- };
512
- FormFieldSuccessMessage.displayName = "FormField.SuccessMessage";
513
-
514
- // src/form-field/index.ts
515
- var FormField2 = Object.assign(FormField, {
516
- Label: FormFieldLabel,
517
- Control: FormFieldControl,
518
- StateMessage: FormFieldStateMessage,
519
- SuccessMessage: FormFieldSuccessMessage,
520
- AlertMessage: FormFieldAlertMessage,
521
- ErrorMessage: FormFieldErrorMessage,
522
- HelperMessage: FormFieldHelperMessage,
523
- RequiredIndicator: FormFieldRequiredIndicator,
524
- CharactersCount: FormFieldCharactersCount
525
- });
526
- FormField2.displayName = "FormField";
527
- FormFieldLabel.displayName = "FormField.Label";
528
- FormFieldControl.displayName = "FormField.Control";
529
- FormFieldStateMessage.displayName = "FormField.StateMessage";
530
- FormFieldSuccessMessage.displayName = "FormField.SuccessMessage";
531
- FormFieldAlertMessage.displayName = "FormField.AlertMessage";
532
- FormFieldErrorMessage.displayName = "FormField.ErrorMessage";
533
- FormFieldHelperMessage.displayName = "FormField.HelperMessage";
534
- FormFieldRequiredIndicator.displayName = "FormField.RequiredIndicator";
535
- FormFieldCharactersCount.displayName = "FormField.CharactersCount";
536
-
537
29
  // src/select/SelectContext.tsx
30
+ var import_form_field = require("@spark-ui/components/form-field");
538
31
  var import_use_combined_state = require("@spark-ui/use-combined-state");
539
- var import_react9 = require("react");
32
+ var import_react2 = require("react");
540
33
 
541
34
  // src/select/utils.ts
542
- var import_react8 = require("react");
35
+ var import_react = require("react");
543
36
  var findElement = (children) => (name) => {
544
- const validChildren = import_react8.Children.toArray(children).filter(import_react8.isValidElement);
37
+ const validChildren = import_react.Children.toArray(children).filter(import_react.isValidElement);
545
38
  return validChildren.find((child) => {
546
39
  return getElementDisplayName(child)?.includes(name);
547
40
  });
@@ -550,8 +43,8 @@ var getElementDisplayName = (element) => {
550
43
  return element ? element.type.displayName : "";
551
44
  };
552
45
  var getOrderedItems = (children, result = []) => {
553
- import_react8.Children.forEach(children, (child) => {
554
- if (!(0, import_react8.isValidElement)(child)) return;
46
+ import_react.Children.forEach(children, (child) => {
47
+ if (!(0, import_react.isValidElement)(child)) return;
555
48
  if (getElementDisplayName(child) === "Select.Item" || getElementDisplayName(child) === "Select.Placeholder") {
556
49
  const childProps = child.props;
557
50
  result.push({
@@ -575,9 +68,9 @@ var getItemsFromChildren = (children) => {
575
68
  };
576
69
 
577
70
  // 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";
71
+ var import_jsx_runtime = require("react/jsx-runtime");
72
+ var SelectContext = (0, import_react2.createContext)(null);
73
+ var ID_PREFIX = ":select";
581
74
  var SelectProvider = ({
582
75
  children,
583
76
  defaultValue,
@@ -591,22 +84,22 @@ var SelectProvider = ({
591
84
  required: requiredProp
592
85
  }) => {
593
86
  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)();
87
+ const [placeholder, setPlaceholder] = (0, import_react2.useState)(void 0);
88
+ const [itemsMap, setItemsMap] = (0, import_react2.useState)(getItemsFromChildren(itemsComponent));
89
+ const [ariaLabel, setAriaLabel] = (0, import_react2.useState)();
597
90
  const firstItem = itemsMap.entries().next().value[1];
598
91
  const selectedItem = typeof value === "string" ? itemsMap.get(value) : firstItem;
599
92
  const isControlled = valueProp != null;
600
- const field = useFormFieldControl();
93
+ const field = (0, import_form_field.useFormFieldControl)();
601
94
  const state = field.state || stateProp;
602
- const internalFieldID = `${ID_PREFIX2}-field-${(0, import_react9.useId)()}`;
95
+ const internalFieldID = `${ID_PREFIX}-field-${(0, import_react2.useId)()}`;
603
96
  const fieldId = field.id || internalFieldID;
604
97
  const fieldLabelId = field.labelId;
605
98
  const disabled = field.disabled ?? disabledProp;
606
99
  const readOnly = field.readOnly ?? readOnlyProp;
607
100
  const name = field.name ?? nameProp;
608
101
  const required = !!(field.isRequired ?? requiredProp);
609
- (0, import_react9.useEffect)(() => {
102
+ (0, import_react2.useEffect)(() => {
610
103
  const newMap = getItemsFromChildren(itemsComponent);
611
104
  const previousItems = [...itemsMap.values()];
612
105
  const newItems = [...newMap.values()];
@@ -619,7 +112,7 @@ var SelectProvider = ({
619
112
  setItemsMap(newMap);
620
113
  }
621
114
  }, [children]);
622
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
115
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
623
116
  SelectContext.Provider,
624
117
  {
625
118
  value: {
@@ -646,7 +139,7 @@ var SelectProvider = ({
646
139
  );
647
140
  };
648
141
  var useSelectContext = () => {
649
- const context = (0, import_react9.useContext)(SelectContext);
142
+ const context = (0, import_react2.useContext)(SelectContext);
650
143
  if (!context) {
651
144
  throw Error("useSelectContext must be used within a Select provider");
652
145
  }
@@ -654,28 +147,28 @@ var useSelectContext = () => {
654
147
  };
655
148
 
656
149
  // src/select/Select.tsx
657
- var import_jsx_runtime19 = require("react/jsx-runtime");
150
+ var import_jsx_runtime2 = require("react/jsx-runtime");
658
151
  var Select = ({ children, ...props }) => {
659
152
  const finder = findElement(children);
660
153
  const trigger = finder("Trigger");
661
154
  const items = finder("Items");
662
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SelectProvider, { ...props, itemsComponent: items, children: trigger });
155
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SelectProvider, { ...props, itemsComponent: items, children: trigger });
663
156
  };
664
157
  Select.displayName = "Select";
665
158
 
666
159
  // src/select/SelectGroup.tsx
667
- var import_class_variance_authority11 = require("class-variance-authority");
160
+ var import_class_variance_authority = require("class-variance-authority");
668
161
 
669
162
  // 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);
163
+ var import_react3 = require("react");
164
+ var import_jsx_runtime3 = require("react/jsx-runtime");
165
+ var SelectGroupContext = (0, import_react3.createContext)(null);
673
166
  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 });
167
+ const [groupLabel, setGroupLabel] = (0, import_react3.useState)("");
168
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectGroupContext.Provider, { value: { groupLabel, setGroupLabel }, children });
676
169
  };
677
170
  var useSelectGroupContext = () => {
678
- const context = (0, import_react10.useContext)(SelectGroupContext);
171
+ const context = (0, import_react3.useContext)(SelectGroupContext);
679
172
  if (!context) {
680
173
  throw Error("useSelectGroupContext must be used within a SelectGroup provider");
681
174
  }
@@ -683,18 +176,18 @@ var useSelectGroupContext = () => {
683
176
  };
684
177
 
685
178
  // src/select/SelectGroup.tsx
686
- var import_jsx_runtime21 = require("react/jsx-runtime");
179
+ var import_jsx_runtime4 = require("react/jsx-runtime");
687
180
  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 }) });
181
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SelectGroupProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(GroupContent, { ref: forwardedRef, ...props, children }) });
689
182
  };
690
183
  var GroupContent = ({ children, className, ref: forwardedRef }) => {
691
184
  const { groupLabel } = useSelectGroupContext();
692
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
185
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
693
186
  "optgroup",
694
187
  {
695
188
  "data-spark-component": "select-group",
696
189
  ref: forwardedRef,
697
- className: (0, import_class_variance_authority11.cx)(className),
190
+ className: (0, import_class_variance_authority.cx)(className),
698
191
  label: groupLabel,
699
192
  children
700
193
  }
@@ -703,9 +196,9 @@ var GroupContent = ({ children, className, ref: forwardedRef }) => {
703
196
  Group.displayName = "Select.Group";
704
197
 
705
198
  // src/select/SelectItem.tsx
706
- var import_jsx_runtime22 = require("react/jsx-runtime");
199
+ var import_jsx_runtime5 = require("react/jsx-runtime");
707
200
  var Item = ({ disabled = false, value, children, ref: forwardedRef }) => {
708
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
201
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
709
202
  "option",
710
203
  {
711
204
  "data-spark-component": "select-item",
@@ -720,9 +213,9 @@ var Item = ({ disabled = false, value, children, ref: forwardedRef }) => {
720
213
  Item.displayName = "Select.Item";
721
214
 
722
215
  // 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)(
216
+ var import_class_variance_authority2 = require("class-variance-authority");
217
+ var import_jsx_runtime6 = require("react/jsx-runtime");
218
+ var styles = (0, import_class_variance_authority2.cva)(
726
219
  [
727
220
  "absolute left-0 top-0 size-full rounded-lg opacity-0",
728
221
  "min-h-sz-44",
@@ -781,7 +274,7 @@ var Items = ({
781
274
  setValue(event.target.value);
782
275
  }
783
276
  };
784
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
277
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
785
278
  "select",
786
279
  {
787
280
  "data-spark-component": "select-items",
@@ -803,36 +296,133 @@ var Items = ({
803
296
  Items.displayName = "Select.Items";
804
297
 
805
298
  // src/select/SelectLabel.tsx
806
- var import_react11 = require("react");
807
- var Label3 = ({ children }) => {
299
+ var import_react4 = require("react");
300
+ var Label = ({ children }) => {
808
301
  const { setGroupLabel } = useSelectGroupContext();
809
- (0, import_react11.useEffect)(() => {
302
+ (0, import_react4.useEffect)(() => {
810
303
  setGroupLabel(children);
811
304
  }, [children]);
812
305
  return null;
813
306
  };
814
- Label3.displayName = "Select.Label";
307
+ Label.displayName = "Select.Label";
308
+
309
+ // src/icon/Icon.tsx
310
+ var import_react6 = require("react");
311
+
312
+ // src/slot/Slot.tsx
313
+ var import_radix_ui = require("radix-ui");
314
+ var import_react5 = require("react");
315
+ var import_jsx_runtime7 = require("react/jsx-runtime");
316
+ var Slottable = import_radix_ui.Slot.Slottable;
317
+ var Slot = ({ ref, ...props }) => {
318
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_radix_ui.Slot.Root, { ref, ...props });
319
+ };
320
+
321
+ // src/visually-hidden/VisuallyHidden.tsx
322
+ var import_jsx_runtime8 = require("react/jsx-runtime");
323
+ var VisuallyHidden = ({ asChild = false, ref, ...props }) => {
324
+ const Component = asChild ? Slot : "span";
325
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
326
+ Component,
327
+ {
328
+ ...props,
329
+ ref,
330
+ style: {
331
+ // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss
332
+ position: "absolute",
333
+ border: 0,
334
+ width: 1,
335
+ height: 1,
336
+ padding: 0,
337
+ margin: -1,
338
+ overflow: "hidden",
339
+ clip: "rect(0, 0, 0, 0)",
340
+ whiteSpace: "nowrap",
341
+ wordWrap: "normal",
342
+ ...props.style
343
+ }
344
+ }
345
+ );
346
+ };
347
+ VisuallyHidden.displayName = "VisuallyHidden";
348
+
349
+ // src/icon/Icon.styles.tsx
350
+ var import_internal_utils = require("@spark-ui/internal-utils");
351
+ var import_class_variance_authority3 = require("class-variance-authority");
352
+ var iconStyles = (0, import_class_variance_authority3.cva)(["fill-current shrink-0"], {
353
+ variants: {
354
+ /**
355
+ * Color scheme of the icon.
356
+ */
357
+ intent: (0, import_internal_utils.makeVariants)({
358
+ current: ["text-current"],
359
+ main: ["text-main"],
360
+ support: ["text-support"],
361
+ accent: ["text-accent"],
362
+ basic: ["text-basic"],
363
+ success: ["text-success"],
364
+ alert: ["text-alert"],
365
+ error: ["text-error"],
366
+ info: ["text-info"],
367
+ neutral: ["text-neutral"]
368
+ }),
369
+ /**
370
+ * Sets the size of the icon.
371
+ */
372
+ size: (0, import_internal_utils.makeVariants)({
373
+ current: ["u-current-font-size"],
374
+ sm: ["w-sz-16", "h-sz-16"],
375
+ md: ["w-sz-24", "h-sz-24"],
376
+ lg: ["w-sz-32", "h-sz-32"],
377
+ xl: ["w-sz-40", "h-sz-40"]
378
+ })
379
+ }
380
+ });
381
+
382
+ // src/icon/Icon.tsx
383
+ var import_jsx_runtime9 = require("react/jsx-runtime");
384
+ var Icon = ({
385
+ label,
386
+ className,
387
+ size = "current",
388
+ intent = "current",
389
+ children,
390
+ ...others
391
+ }) => {
392
+ const child = import_react6.Children.only(children);
393
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
394
+ (0, import_react6.cloneElement)(child, {
395
+ className: iconStyles({ className, size, intent }),
396
+ "data-spark-component": "icon",
397
+ "aria-hidden": "true",
398
+ focusable: "false",
399
+ ...others
400
+ }),
401
+ label && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(VisuallyHidden, { children: label })
402
+ ] });
403
+ };
404
+ Icon.displayName = "Icon";
815
405
 
816
406
  // src/select/SelectLeadingIcon.tsx
817
- var import_jsx_runtime24 = require("react/jsx-runtime");
407
+ var import_jsx_runtime10 = require("react/jsx-runtime");
818
408
  var LeadingIcon = ({ children }) => {
819
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Icon, { size: "sm", className: "shrink-0", children });
409
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Icon, { size: "sm", className: "shrink-0", children });
820
410
  };
821
411
  LeadingIcon.displayName = "Select.LeadingIcon";
822
412
 
823
413
  // src/select/SelectPlaceholder.tsx
824
- var import_react12 = require("react");
825
- var import_jsx_runtime25 = require("react/jsx-runtime");
414
+ var import_react7 = require("react");
415
+ var import_jsx_runtime11 = require("react/jsx-runtime");
826
416
  var Placeholder = ({
827
417
  disabled = false,
828
418
  children,
829
419
  ref: forwardedRef
830
420
  }) => {
831
421
  const { setPlaceholder } = useSelectContext();
832
- (0, import_react12.useEffect)(() => {
422
+ (0, import_react7.useEffect)(() => {
833
423
  setPlaceholder(children);
834
424
  }, [children]);
835
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
425
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
836
426
  "option",
837
427
  {
838
428
  "data-spark-component": "select-placeholder",
@@ -848,11 +438,11 @@ Placeholder.displayName = "Select.Placeholder";
848
438
 
849
439
  // src/select/SelectTrigger.tsx
850
440
  var import_ArrowHorizontalDown = require("@spark-ui/icons/ArrowHorizontalDown");
851
- var import_react13 = require("react");
441
+ var import_react8 = require("react");
852
442
 
853
443
  // src/select/SelectTrigger.styles.tsx
854
- var import_class_variance_authority13 = require("class-variance-authority");
855
- var styles2 = (0, import_class_variance_authority13.cva)(
444
+ var import_class_variance_authority4 = require("class-variance-authority");
445
+ var styles2 = (0, import_class_variance_authority4.cva)(
856
446
  [
857
447
  "relative flex w-full items-center justify-between",
858
448
  "min-h-sz-44 rounded-lg px-lg",
@@ -899,7 +489,7 @@ var styles2 = (0, import_class_variance_authority13.cva)(
899
489
  );
900
490
 
901
491
  // src/select/SelectTrigger.tsx
902
- var import_jsx_runtime26 = require("react/jsx-runtime");
492
+ var import_jsx_runtime12 = require("react/jsx-runtime");
903
493
  var Trigger = ({
904
494
  "aria-label": ariaLabel,
905
495
  children,
@@ -907,20 +497,20 @@ var Trigger = ({
907
497
  ref: forwardedRef
908
498
  }) => {
909
499
  const { disabled, readOnly, state, setAriaLabel, itemsComponent } = useSelectContext();
910
- (0, import_react13.useEffect)(() => {
500
+ (0, import_react8.useEffect)(() => {
911
501
  if (ariaLabel) {
912
502
  setAriaLabel(ariaLabel);
913
503
  }
914
504
  }, [ariaLabel]);
915
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
505
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
916
506
  "div",
917
507
  {
918
508
  "data-spark-component": "select-trigger",
919
509
  ref: forwardedRef,
920
510
  className: styles2({ className, state, disabled, readOnly }),
921
511
  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, {}) }),
512
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "gap-md flex items-center justify-start", children }),
513
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon, { className: "ml-md shrink-0", size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_ArrowHorizontalDown.ArrowHorizontalDown, {}) }),
924
514
  itemsComponent
925
515
  ]
926
516
  }
@@ -929,8 +519,8 @@ var Trigger = ({
929
519
  Trigger.displayName = "Select.Trigger";
930
520
 
931
521
  // src/select/SelectValue.tsx
932
- var import_class_variance_authority14 = require("class-variance-authority");
933
- var import_jsx_runtime27 = require("react/jsx-runtime");
522
+ var import_class_variance_authority5 = require("class-variance-authority");
523
+ var import_jsx_runtime13 = require("react/jsx-runtime");
934
524
  var Value = ({
935
525
  children,
936
526
  className,
@@ -940,17 +530,17 @@ var Value = ({
940
530
  const { selectedItem, placeholder, disabled } = useSelectContext();
941
531
  const isPlaceholderSelected = selectedItem?.value == null;
942
532
  const valuePlaceholder = customPlaceholder || placeholder;
943
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
533
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
944
534
  "span",
945
535
  {
946
536
  role: "presentation",
947
537
  "data-spark-component": "select-value",
948
538
  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)(
539
+ className: (0, import_class_variance_authority5.cx)("flex shrink items-center text-left", className),
540
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
951
541
  "span",
952
542
  {
953
- className: (0, import_class_variance_authority14.cx)(
543
+ className: (0, import_class_variance_authority5.cx)(
954
544
  "line-clamp-1 flex-1 overflow-hidden break-all text-ellipsis",
955
545
  isPlaceholderSelected && !disabled && "text-on-surface/dim-1"
956
546
  ),
@@ -968,7 +558,7 @@ var Select2 = Object.assign(Select, {
968
558
  Item,
969
559
  Items,
970
560
  Placeholder,
971
- Label: Label3,
561
+ Label,
972
562
  Trigger,
973
563
  Value,
974
564
  LeadingIcon
@@ -978,7 +568,7 @@ Group.displayName = "Select.Group";
978
568
  Items.displayName = "Select.Items";
979
569
  Item.displayName = "Select.Item";
980
570
  Placeholder.displayName = "Select.Placeholder";
981
- Label3.displayName = "Select.Label";
571
+ Label.displayName = "Select.Label";
982
572
  Trigger.displayName = "Select.Trigger";
983
573
  Value.displayName = "Select.Value";
984
574
  LeadingIcon.displayName = "Select.LeadingIcon";