@vantageos/mosaic 0.3.1 → 0.5.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 (157) hide show
  1. package/CHANGELOG.md +88 -2
  2. package/LICENSE +110 -0
  3. package/README.md +193 -21
  4. package/dist/PipelineBoard-FucyGArR.d.cts +759 -0
  5. package/dist/PipelineBoard-FucyGArR.d.ts +759 -0
  6. package/dist/PipelineBoard.markdown-DIcvrS-2.d.cts +16 -0
  7. package/dist/PipelineBoard.markdown-DIcvrS-2.d.ts +16 -0
  8. package/dist/{StatusBadge.schema-1tOjB4Ir.d.cts → StatusBadge.schema-BEjSH2_4.d.cts} +2 -2
  9. package/dist/{StatusBadge.schema-1tOjB4Ir.d.ts → StatusBadge.schema-BEjSH2_4.d.ts} +2 -2
  10. package/dist/{Tabs.schema-BzcEyeq8.d.cts → Tabs.schema-Dqr6vwV3.d.cts} +2 -2
  11. package/dist/{Tabs.schema-BzcEyeq8.d.ts → Tabs.schema-Dqr6vwV3.d.ts} +2 -2
  12. package/dist/Timeline-Coo_3tA_.d.cts +114 -0
  13. package/dist/Timeline-Coo_3tA_.d.ts +114 -0
  14. package/dist/Timeline.markdown-C6UPDv1H.d.cts +4 -0
  15. package/dist/Timeline.markdown-C6UPDv1H.d.ts +4 -0
  16. package/dist/TransactionPreview-BzWDn8kE.d.cts +391 -0
  17. package/dist/TransactionPreview-BzWDn8kE.d.ts +391 -0
  18. package/dist/TransactionPreview.markdown-Dpb0VYgN.d.cts +7 -0
  19. package/dist/TransactionPreview.markdown-Dpb0VYgN.d.ts +7 -0
  20. package/dist/artifacts.cjs +190 -2
  21. package/dist/artifacts.cjs.map +1 -1
  22. package/dist/artifacts.js +190 -2
  23. package/dist/artifacts.js.map +1 -1
  24. package/dist/confirmation.cjs +728 -2
  25. package/dist/confirmation.cjs.map +1 -1
  26. package/dist/confirmation.d.cts +2 -1
  27. package/dist/confirmation.d.ts +2 -1
  28. package/dist/confirmation.js +726 -4
  29. package/dist/confirmation.js.map +1 -1
  30. package/dist/display.cjs +1555 -203
  31. package/dist/display.cjs.map +1 -1
  32. package/dist/display.d.cts +6 -229
  33. package/dist/display.d.ts +6 -229
  34. package/dist/display.js +1539 -206
  35. package/dist/display.js.map +1 -1
  36. package/dist/forms.cjs +139 -46
  37. package/dist/forms.cjs.map +1 -1
  38. package/dist/forms.d.cts +2 -2
  39. package/dist/forms.d.ts +2 -2
  40. package/dist/forms.js +139 -46
  41. package/dist/forms.js.map +1 -1
  42. package/dist/host.cjs +822 -0
  43. package/dist/host.cjs.map +1 -0
  44. package/dist/host.d.cts +287 -0
  45. package/dist/host.d.ts +287 -0
  46. package/dist/host.js +794 -0
  47. package/dist/host.js.map +1 -0
  48. package/dist/{index-CwXVgtGb.d.cts → index-BadRcCbm.d.cts} +28 -11
  49. package/dist/{index-CwXVgtGb.d.ts → index-BadRcCbm.d.ts} +28 -11
  50. package/dist/index.cjs +2202 -247
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.d.cts +42 -8
  53. package/dist/index.d.ts +42 -8
  54. package/dist/index.js +2167 -251
  55. package/dist/index.js.map +1 -1
  56. package/dist/input.d.cts +2 -2
  57. package/dist/input.d.ts +2 -2
  58. package/dist/media.cjs +190 -2
  59. package/dist/media.cjs.map +1 -1
  60. package/dist/media.d.cts +1 -1
  61. package/dist/media.d.ts +1 -1
  62. package/dist/media.js +190 -2
  63. package/dist/media.js.map +1 -1
  64. package/dist/preact/artifacts.js +190 -2
  65. package/dist/preact/artifacts.js.map +1 -1
  66. package/dist/preact/confirmation.d.ts +321 -1
  67. package/dist/preact/confirmation.js +629 -4
  68. package/dist/preact/confirmation.js.map +1 -1
  69. package/dist/preact/display.d.ts +570 -31
  70. package/dist/preact/display.js +1248 -126
  71. package/dist/preact/display.js.map +1 -1
  72. package/dist/preact/forms.d.ts +32 -15
  73. package/dist/preact/forms.js +139 -46
  74. package/dist/preact/forms.js.map +1 -1
  75. package/dist/preact/host.d.ts +307 -0
  76. package/dist/preact/host.js +875 -0
  77. package/dist/preact/host.js.map +1 -0
  78. package/dist/preact/media.d.ts +37 -1
  79. package/dist/preact/media.js +423 -0
  80. package/dist/preact/media.js.map +1 -1
  81. package/dist/preact/progress.d.ts +92 -1
  82. package/dist/preact/progress.js +469 -3
  83. package/dist/preact/progress.js.map +1 -1
  84. package/dist/progress.cjs +525 -2
  85. package/dist/progress.cjs.map +1 -1
  86. package/dist/progress.d.cts +2 -1
  87. package/dist/progress.d.ts +2 -1
  88. package/dist/progress.js +522 -3
  89. package/dist/progress.js.map +1 -1
  90. package/dist/react/artifacts.cjs +190 -2
  91. package/dist/react/artifacts.cjs.map +1 -1
  92. package/dist/react/artifacts.js +190 -2
  93. package/dist/react/artifacts.js.map +1 -1
  94. package/dist/react/confirmation.cjs +630 -2
  95. package/dist/react/confirmation.cjs.map +1 -1
  96. package/dist/react/confirmation.d.cts +3 -3
  97. package/dist/react/confirmation.d.ts +3 -3
  98. package/dist/react/confirmation.js +629 -4
  99. package/dist/react/confirmation.js.map +1 -1
  100. package/dist/react/display.cjs +1137 -123
  101. package/dist/react/display.cjs.map +1 -1
  102. package/dist/react/display.d.cts +42 -14
  103. package/dist/react/display.d.ts +42 -14
  104. package/dist/react/display.js +1122 -126
  105. package/dist/react/display.js.map +1 -1
  106. package/dist/react/forms.cjs +139 -46
  107. package/dist/react/forms.cjs.map +1 -1
  108. package/dist/react/forms.d.cts +1 -1
  109. package/dist/react/forms.d.ts +1 -1
  110. package/dist/react/forms.js +139 -46
  111. package/dist/react/forms.js.map +1 -1
  112. package/dist/react/host.cjs +910 -0
  113. package/dist/react/host.cjs.map +1 -0
  114. package/dist/react/host.d.cts +24 -0
  115. package/dist/react/host.d.ts +24 -0
  116. package/dist/react/host.js +875 -0
  117. package/dist/react/host.js.map +1 -0
  118. package/dist/react/input.d.cts +1 -1
  119. package/dist/react/input.d.ts +1 -1
  120. package/dist/react/media.cjs +426 -0
  121. package/dist/react/media.cjs.map +1 -1
  122. package/dist/react/media.d.cts +19 -1
  123. package/dist/react/media.d.ts +19 -1
  124. package/dist/react/media.js +423 -0
  125. package/dist/react/media.js.map +1 -1
  126. package/dist/react/progress.cjs +471 -2
  127. package/dist/react/progress.cjs.map +1 -1
  128. package/dist/react/progress.d.cts +1 -1
  129. package/dist/react/progress.d.ts +1 -1
  130. package/dist/react/progress.js +469 -3
  131. package/dist/react/progress.js.map +1 -1
  132. package/dist/server/resource.cjs +151 -0
  133. package/dist/server/resource.cjs.map +1 -0
  134. package/dist/server/resource.d.cts +90 -0
  135. package/dist/server/resource.d.ts +90 -0
  136. package/dist/server/resource.js +147 -0
  137. package/dist/server/resource.js.map +1 -0
  138. package/dist/server.cjs +1100 -25
  139. package/dist/server.cjs.map +1 -1
  140. package/dist/server.d.cts +84 -5
  141. package/dist/server.d.ts +84 -5
  142. package/dist/server.js +1087 -27
  143. package/dist/server.js.map +1 -1
  144. package/dist/tokens.cjs +73 -22
  145. package/dist/tokens.cjs.map +1 -1
  146. package/dist/tokens.d.cts +23 -3
  147. package/dist/tokens.d.ts +23 -3
  148. package/dist/tokens.js +73 -22
  149. package/dist/tokens.js.map +1 -1
  150. package/package.json +250 -231
  151. package/registry.yaml +51 -2
  152. package/dist/Alert.schema-LPJE5gFP.d.cts +0 -71
  153. package/dist/Alert.schema-LPJE5gFP.d.ts +0 -71
  154. package/dist/ProgressBar.schema-CdVYx0Wq.d.cts +0 -22
  155. package/dist/ProgressBar.schema-CdVYx0Wq.d.ts +0 -22
  156. package/dist/{ConfirmDialog-B3CQQGmJ.d.cts → ConfirmDialog-BCtOcmHe.d.cts} +1 -1
  157. package/dist/{ConfirmDialog-B3CQQGmJ.d.ts → ConfirmDialog-BCtOcmHe.d.ts} +1 -1
@@ -1,4 +1,4 @@
1
- export { C as Checkbox, am as CheckboxProps, b as CheckboxPropsSchema, c as CheckboxPropsValidated, D as DEFAULT_TEXTAREA_ROWS, E as ErrorDisplay, an as ErrorDisplayProps, d as ErrorDisplayPropsSchema, e as FieldArray, ao as FieldArrayControls, ap as FieldArrayProps, f as FieldArrayPropsSchema, aq as FieldArrayRenderItemArgs, F as FieldErrorShape, g as FieldErrorShapeSchema, h as FormField, ar as FormFieldProps, i as FormFieldPropsSchema, as as FormFieldRenderArgs, j as FormProvider, at as FormProviderProps, k as FormProviderPropsSchema, l as Input, au as InputProps, m as InputPropsSchema, I as InputType, o as InputTypeSchema, M as MosaicFormMode, p as MosaicFormModeSchema, q as MultiSelect, a as MultiSelectOption, r as MultiSelectOptionSchema, av as MultiSelectProps, s as MultiSelectPropsSchema, R as RadioGroup, t as RadioGroupOption, u as RadioGroupOptionSchema, aw as RadioGroupProps, v as RadioGroupPropsSchema, w as RadioGroupPropsValidated, x as RadioOrientation, y as Select, S as SelectOption, z as SelectOptionSchema, ax as SelectProps, A as SelectPropsSchema, B as SelectPropsValidated, G as SubmitButton, ay as SubmitButtonProps, H as SubmitButtonPropsSchema, T as Textarea, az as TextareaProps, J as TextareaPropsSchema, K as TextareaPropsValidated, aA as UseFieldArrayOptions, U as UseFieldArrayOptionsSchema, aB as UseFieldArrayReturn, aC as UseMosaicFormOptions, N as UseMosaicFormOptionsSchema, O as UseMosaicFormReturn, P as buildAddAriaLabel, Q as buildListAriaLabel, V as buildRemoveAriaLabel, W as clampToMaxLength, X as computeAutoResizeHeight, Y as findFirstEnabledIndex, Z as findLastEnabledIndex, _ as findNextEnabledIndex, $ as findSelectedIndex, a0 as getGroupClasses, a1 as getGroupLabelId, a2 as getNavKeys, a3 as getOptionDescriptionId, a4 as getOptionLabelId, a5 as getOptionRowClasses, a6 as getRadioControlClasses, a7 as getRovingTabIndex, a8 as isActivationKey, a9 as nextFocusIndexAfterRemove, aa as resolveAriaChecked, ab as resolveDescribedBy, ac as resolveRows, ad as useFieldArray, ae as useMosaicForm, af as useMosaicFormContext, ag as validateCheckboxProps, ai as validateRadioGroupProps, aj as validateSelectProps, al as validateTextareaProps } from '../index-CwXVgtGb.cjs';
1
+ export { C as Checkbox, am as CheckboxProps, b as CheckboxPropsSchema, c as CheckboxPropsValidated, D as DEFAULT_TEXTAREA_ROWS, E as ErrorDisplay, an as ErrorDisplayProps, d as ErrorDisplayPropsSchema, e as FieldArray, ao as FieldArrayControls, ap as FieldArrayProps, f as FieldArrayPropsSchema, aq as FieldArrayRenderItemArgs, F as FieldErrorShape, g as FieldErrorShapeSchema, h as FormField, ar as FormFieldProps, i as FormFieldPropsSchema, as as FormFieldRenderArgs, j as FormProvider, at as FormProviderProps, k as FormProviderPropsSchema, l as Input, au as InputProps, m as InputPropsSchema, I as InputType, o as InputTypeSchema, M as MosaicFormMode, p as MosaicFormModeSchema, q as MultiSelect, a as MultiSelectOption, r as MultiSelectOptionSchema, av as MultiSelectProps, s as MultiSelectPropsSchema, R as RadioGroup, t as RadioGroupOption, u as RadioGroupOptionSchema, aw as RadioGroupProps, v as RadioGroupPropsSchema, w as RadioGroupPropsValidated, x as RadioOrientation, y as Select, S as SelectOption, z as SelectOptionSchema, ax as SelectProps, A as SelectPropsSchema, B as SelectPropsValidated, G as SubmitButton, ay as SubmitButtonProps, H as SubmitButtonPropsSchema, T as Textarea, az as TextareaProps, J as TextareaPropsSchema, K as TextareaPropsValidated, aA as UseFieldArrayOptions, U as UseFieldArrayOptionsSchema, aB as UseFieldArrayReturn, aC as UseMosaicFormOptions, N as UseMosaicFormOptionsSchema, O as UseMosaicFormReturn, P as buildAddAriaLabel, Q as buildListAriaLabel, V as buildRemoveAriaLabel, W as clampToMaxLength, X as computeAutoResizeHeight, Y as findFirstEnabledIndex, Z as findLastEnabledIndex, _ as findNextEnabledIndex, $ as findSelectedIndex, a0 as getGroupClasses, a1 as getGroupLabelId, a2 as getNavKeys, a3 as getOptionDescriptionId, a4 as getOptionLabelId, a5 as getOptionRowClasses, a6 as getRadioControlClasses, a7 as getRovingTabIndex, a8 as isActivationKey, a9 as nextFocusIndexAfterRemove, aa as resolveAriaChecked, ab as resolveDescribedBy, ac as resolveRows, ad as useFieldArray, ae as useMosaicForm, af as useMosaicFormContext, ag as validateCheckboxProps, ai as validateRadioGroupProps, aj as validateSelectProps, al as validateTextareaProps } from '../index-BadRcCbm.cjs';
2
2
  import 'react-hook-form';
3
3
  import 'zod';
4
4
  import 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- export { C as Checkbox, am as CheckboxProps, b as CheckboxPropsSchema, c as CheckboxPropsValidated, D as DEFAULT_TEXTAREA_ROWS, E as ErrorDisplay, an as ErrorDisplayProps, d as ErrorDisplayPropsSchema, e as FieldArray, ao as FieldArrayControls, ap as FieldArrayProps, f as FieldArrayPropsSchema, aq as FieldArrayRenderItemArgs, F as FieldErrorShape, g as FieldErrorShapeSchema, h as FormField, ar as FormFieldProps, i as FormFieldPropsSchema, as as FormFieldRenderArgs, j as FormProvider, at as FormProviderProps, k as FormProviderPropsSchema, l as Input, au as InputProps, m as InputPropsSchema, I as InputType, o as InputTypeSchema, M as MosaicFormMode, p as MosaicFormModeSchema, q as MultiSelect, a as MultiSelectOption, r as MultiSelectOptionSchema, av as MultiSelectProps, s as MultiSelectPropsSchema, R as RadioGroup, t as RadioGroupOption, u as RadioGroupOptionSchema, aw as RadioGroupProps, v as RadioGroupPropsSchema, w as RadioGroupPropsValidated, x as RadioOrientation, y as Select, S as SelectOption, z as SelectOptionSchema, ax as SelectProps, A as SelectPropsSchema, B as SelectPropsValidated, G as SubmitButton, ay as SubmitButtonProps, H as SubmitButtonPropsSchema, T as Textarea, az as TextareaProps, J as TextareaPropsSchema, K as TextareaPropsValidated, aA as UseFieldArrayOptions, U as UseFieldArrayOptionsSchema, aB as UseFieldArrayReturn, aC as UseMosaicFormOptions, N as UseMosaicFormOptionsSchema, O as UseMosaicFormReturn, P as buildAddAriaLabel, Q as buildListAriaLabel, V as buildRemoveAriaLabel, W as clampToMaxLength, X as computeAutoResizeHeight, Y as findFirstEnabledIndex, Z as findLastEnabledIndex, _ as findNextEnabledIndex, $ as findSelectedIndex, a0 as getGroupClasses, a1 as getGroupLabelId, a2 as getNavKeys, a3 as getOptionDescriptionId, a4 as getOptionLabelId, a5 as getOptionRowClasses, a6 as getRadioControlClasses, a7 as getRovingTabIndex, a8 as isActivationKey, a9 as nextFocusIndexAfterRemove, aa as resolveAriaChecked, ab as resolveDescribedBy, ac as resolveRows, ad as useFieldArray, ae as useMosaicForm, af as useMosaicFormContext, ag as validateCheckboxProps, ai as validateRadioGroupProps, aj as validateSelectProps, al as validateTextareaProps } from '../index-CwXVgtGb.js';
1
+ export { C as Checkbox, am as CheckboxProps, b as CheckboxPropsSchema, c as CheckboxPropsValidated, D as DEFAULT_TEXTAREA_ROWS, E as ErrorDisplay, an as ErrorDisplayProps, d as ErrorDisplayPropsSchema, e as FieldArray, ao as FieldArrayControls, ap as FieldArrayProps, f as FieldArrayPropsSchema, aq as FieldArrayRenderItemArgs, F as FieldErrorShape, g as FieldErrorShapeSchema, h as FormField, ar as FormFieldProps, i as FormFieldPropsSchema, as as FormFieldRenderArgs, j as FormProvider, at as FormProviderProps, k as FormProviderPropsSchema, l as Input, au as InputProps, m as InputPropsSchema, I as InputType, o as InputTypeSchema, M as MosaicFormMode, p as MosaicFormModeSchema, q as MultiSelect, a as MultiSelectOption, r as MultiSelectOptionSchema, av as MultiSelectProps, s as MultiSelectPropsSchema, R as RadioGroup, t as RadioGroupOption, u as RadioGroupOptionSchema, aw as RadioGroupProps, v as RadioGroupPropsSchema, w as RadioGroupPropsValidated, x as RadioOrientation, y as Select, S as SelectOption, z as SelectOptionSchema, ax as SelectProps, A as SelectPropsSchema, B as SelectPropsValidated, G as SubmitButton, ay as SubmitButtonProps, H as SubmitButtonPropsSchema, T as Textarea, az as TextareaProps, J as TextareaPropsSchema, K as TextareaPropsValidated, aA as UseFieldArrayOptions, U as UseFieldArrayOptionsSchema, aB as UseFieldArrayReturn, aC as UseMosaicFormOptions, N as UseMosaicFormOptionsSchema, O as UseMosaicFormReturn, P as buildAddAriaLabel, Q as buildListAriaLabel, V as buildRemoveAriaLabel, W as clampToMaxLength, X as computeAutoResizeHeight, Y as findFirstEnabledIndex, Z as findLastEnabledIndex, _ as findNextEnabledIndex, $ as findSelectedIndex, a0 as getGroupClasses, a1 as getGroupLabelId, a2 as getNavKeys, a3 as getOptionDescriptionId, a4 as getOptionLabelId, a5 as getOptionRowClasses, a6 as getRadioControlClasses, a7 as getRovingTabIndex, a8 as isActivationKey, a9 as nextFocusIndexAfterRemove, aa as resolveAriaChecked, ab as resolveDescribedBy, ac as resolveRows, ad as useFieldArray, ae as useMosaicForm, af as useMosaicFormContext, ag as validateCheckboxProps, ai as validateRadioGroupProps, aj as validateSelectProps, al as validateTextareaProps } from '../index-BadRcCbm.js';
2
2
  import 'react-hook-form';
3
3
  import 'zod';
4
4
  import 'react/jsx-runtime';
@@ -512,7 +512,9 @@ var MultiSelectPropsSchema = z.object({
512
512
  placeholder: z.string().optional(),
513
513
  disabled: z.boolean().optional(),
514
514
  searchable: z.boolean().optional(),
515
- maxItems: z.number().int().positive().optional()
515
+ maxItems: z.number().int().positive().optional(),
516
+ /** `chips`: every option is a visible toggle button (aria-pressed), no dropdown. */
517
+ appearance: z.enum(["default", "chips"]).default("default")
516
518
  });
517
519
  function MultiSelect(props) {
518
520
  const parsed = MultiSelectPropsSchema.parse({
@@ -522,15 +524,32 @@ function MultiSelect(props) {
522
524
  placeholder: props.placeholder,
523
525
  disabled: props.disabled,
524
526
  searchable: props.searchable,
525
- maxItems: props.maxItems
527
+ maxItems: props.maxItems,
528
+ appearance: props.appearance
526
529
  });
527
- const { name, label, options, placeholder, disabled, searchable, maxItems } = parsed;
530
+ const { name, label, options, placeholder, disabled, searchable, maxItems, appearance } = parsed;
528
531
  const reactId = useId();
529
532
  const triggerId = `${reactId}-trigger`;
530
533
  const listboxId = `${reactId}-listbox`;
531
534
  const labelId = `${reactId}-label`;
532
535
  return /* @__PURE__ */ jsx(FormField, { name, children: ({ field }) => {
533
536
  const value = Array.isArray(field.value) ? field.value : [];
537
+ if (appearance === "chips") {
538
+ return /* @__PURE__ */ jsx(
539
+ ChipToggles,
540
+ {
541
+ labelId,
542
+ label,
543
+ options,
544
+ value,
545
+ disabled,
546
+ maxItems,
547
+ onChange: (next) => field.onChange(next),
548
+ onBlur: () => field.onBlur(),
549
+ className: props.className
550
+ }
551
+ );
552
+ }
534
553
  return /* @__PURE__ */ jsx(
535
554
  Inner,
536
555
  {
@@ -551,6 +570,39 @@ function MultiSelect(props) {
551
570
  );
552
571
  } });
553
572
  }
573
+ function ChipToggles(p) {
574
+ const atMax = isAtMaxItems(p.value, p.maxItems);
575
+ return /* @__PURE__ */ jsxs(
576
+ "fieldset",
577
+ {
578
+ "aria-labelledby": p.labelId,
579
+ "data-appearance": "chips",
580
+ className: `m-0 min-w-0 border-0 p-0 ${p.className ?? "mosaic-multiselect mosaic-multiselect--chips"}`,
581
+ onBlur: p.onBlur,
582
+ children: [
583
+ /* @__PURE__ */ jsx("span", { id: p.labelId, className: "mosaic-multiselect-label", children: p.label }),
584
+ /* @__PURE__ */ jsx("div", { className: "flex flex-row flex-wrap gap-2", children: p.options.map((opt) => {
585
+ const on = p.value.includes(opt.value);
586
+ return /* @__PURE__ */ jsx(
587
+ "button",
588
+ {
589
+ type: "button",
590
+ "aria-pressed": on,
591
+ disabled: p.disabled || !on && atMax,
592
+ "data-chip-value": opt.value,
593
+ className: `mosaic-multiselect-chip inline-flex items-center rounded-full border px-3 py-1 text-sm ${on ? "border-slate-900 bg-slate-900 text-white" : "border-slate-300 bg-white text-slate-700 hover:bg-slate-50"} disabled:cursor-not-allowed disabled:opacity-50`,
594
+ onClick: () => p.onChange(
595
+ on ? removeValue(p.value, opt.value) : addValue(p.value, opt.value, p.maxItems)
596
+ ),
597
+ children: opt.label
598
+ },
599
+ opt.value
600
+ );
601
+ }) })
602
+ ]
603
+ }
604
+ );
605
+ }
554
606
  function Inner(p) {
555
607
  const [open, setOpen] = useState(false);
556
608
  const [query, setQuery] = useState("");
@@ -761,10 +813,21 @@ function getOptionLabelId(instanceId, name, optionValue) {
761
813
  function getOptionDescriptionId(instanceId, name, optionValue) {
762
814
  return `${instanceId}-${name}-${optionValue}-desc`;
763
815
  }
764
- function getGroupClasses(orientation) {
816
+ function getGroupClasses(orientation, appearance = "default") {
817
+ if (appearance === "segmented") {
818
+ return "inline-flex flex-row overflow-hidden rounded-md border border-slate-300";
819
+ }
820
+ if (appearance === "chips") return "flex flex-row flex-wrap gap-2";
765
821
  return orientation === "vertical" ? "flex flex-col gap-2" : "flex flex-row flex-wrap gap-4";
766
822
  }
767
- function getOptionRowClasses(isDisabled, orientation) {
823
+ function getOptionRowClasses(isDisabled, orientation, appearance = "default") {
824
+ const state0 = isDisabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer";
825
+ if (appearance !== "default") {
826
+ return [
827
+ "relative inline-flex items-center focus-within:outline focus-within:outline-2 focus-within:outline-blue-600",
828
+ state0
829
+ ].join(" ");
830
+ }
768
831
  const base = "flex items-start gap-2";
769
832
  const orient = orientation === "vertical" ? "flex-row" : "flex-row";
770
833
  const state = isDisabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer";
@@ -778,6 +841,13 @@ function getRadioControlClasses(isSelected, isDisabled) {
778
841
  function isActivationKey(key) {
779
842
  return key === " " || key === "Space" || key === "Enter";
780
843
  }
844
+ function getOptionLabelClasses(appearance, isSelected) {
845
+ if (appearance === "default") return "mosaic-forms-radiogroup-option-label";
846
+ const base = "mosaic-forms-radiogroup-option-label inline-flex items-center px-3 py-1 text-sm";
847
+ const shape = appearance === "chips" ? "rounded-full border" : "";
848
+ const tone = isSelected ? "bg-slate-900 text-white border-slate-900" : "bg-white text-slate-700 border-slate-300 hover:bg-slate-50";
849
+ return [base, shape, tone].filter(Boolean).join(" ");
850
+ }
781
851
  var RadioGroupOptionSchema = z.object({
782
852
  value: z.string().min(1),
783
853
  label: z.string().min(1),
@@ -789,6 +859,12 @@ var RadioGroupPropsSchema = z.object({
789
859
  label: z.string().min(1),
790
860
  options: z.array(RadioGroupOptionSchema).min(1),
791
861
  orientation: z.enum(["vertical", "horizontal"]).default("vertical"),
862
+ /**
863
+ * `segmented` / `chips` render the options as always-visible controls (Claude design
864
+ * guidelines prefer visible options over menus, which clip inside the iframe). The ARIA
865
+ * radiogroup semantics are identical in every appearance.
866
+ */
867
+ appearance: z.enum(["default", "segmented", "chips"]).default("default"),
792
868
  disabled: z.boolean().optional().default(false),
793
869
  locale: z.enum(["en", "fr"]).default("en")
794
870
  });
@@ -801,9 +877,10 @@ function RadioGroup(props) {
801
877
  label: props.label,
802
878
  options: props.options,
803
879
  orientation: props.orientation,
804
- disabled: props.disabled
880
+ disabled: props.disabled,
881
+ appearance: props.appearance
805
882
  });
806
- const { name, label, options, orientation, disabled } = validated;
883
+ const { name, label, options, orientation, disabled, appearance } = validated;
807
884
  const instanceId = useId();
808
885
  const groupLabelId = getGroupLabelId(instanceId, name);
809
886
  const { prev: prevKey, next: nextKey } = getNavKeys(orientation);
@@ -858,51 +935,67 @@ function RadioGroup(props) {
858
935
  "aria-labelledby": groupLabelId,
859
936
  "aria-orientation": orientation,
860
937
  "aria-disabled": disabled || void 0,
861
- className: getGroupClasses(orientation),
938
+ "data-appearance": appearance === "default" ? void 0 : appearance,
939
+ className: getGroupClasses(orientation, appearance),
862
940
  children: options.map((option, index) => {
863
941
  const isSelected = selectedValue === option.value;
864
942
  const isDisabled = !!(disabled || option.disabled);
865
943
  const optLabelId = getOptionLabelId(instanceId, name, option.value);
866
944
  const optDescId = option.description ? getOptionDescriptionId(instanceId, name, option.value) : void 0;
867
945
  const tabIdx = index === rovingIdx ? 0 : -1;
868
- return /* @__PURE__ */ jsxs("div", { className: getOptionRowClasses(isDisabled, orientation), children: [
869
- /* @__PURE__ */ jsx(
870
- "input",
871
- {
872
- ref: (el) => {
873
- radioRefs.current[index] = el;
874
- },
875
- type: "radio",
876
- id: `${instanceId}-${name}-${option.value}`,
877
- name: field.name,
878
- value: option.value,
879
- checked: isSelected,
880
- disabled: isDisabled,
881
- "aria-labelledby": optLabelId,
882
- "aria-describedby": optDescId,
883
- tabIndex: isDisabled ? -1 : tabIdx,
884
- className: "mosaic-forms-radiogroup-input sr-only",
885
- onChange: () => {
886
- field.onChange(option.value);
887
- },
888
- onKeyDown: (e) => {
889
- if (!isDisabled) handleKeyDown(e, index);
890
- },
891
- onBlur: field.onBlur
892
- }
893
- ),
894
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
895
- /* @__PURE__ */ jsx("span", { id: optLabelId, className: "mosaic-forms-radiogroup-option-label", children: option.label }),
896
- option.description ? /* @__PURE__ */ jsx(
897
- "span",
898
- {
899
- id: optDescId,
900
- className: "mosaic-forms-radiogroup-option-description text-sm text-slate-500",
901
- children: option.description
902
- }
903
- ) : null
904
- ] })
905
- ] }, option.value);
946
+ return /* @__PURE__ */ jsxs(
947
+ "div",
948
+ {
949
+ className: getOptionRowClasses(isDisabled, orientation, appearance),
950
+ children: [
951
+ /* @__PURE__ */ jsx(
952
+ "input",
953
+ {
954
+ ref: (el) => {
955
+ radioRefs.current[index] = el;
956
+ },
957
+ type: "radio",
958
+ id: `${instanceId}-${name}-${option.value}`,
959
+ name: field.name,
960
+ value: option.value,
961
+ checked: isSelected,
962
+ disabled: isDisabled,
963
+ "aria-labelledby": optLabelId,
964
+ "aria-describedby": optDescId,
965
+ tabIndex: isDisabled ? -1 : tabIdx,
966
+ className: "mosaic-forms-radiogroup-input sr-only",
967
+ onChange: () => {
968
+ field.onChange(option.value);
969
+ },
970
+ onKeyDown: (e) => {
971
+ if (!isDisabled) handleKeyDown(e, index);
972
+ },
973
+ onBlur: field.onBlur
974
+ }
975
+ ),
976
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
977
+ /* @__PURE__ */ jsx(
978
+ "span",
979
+ {
980
+ id: optLabelId,
981
+ "data-selected": isSelected ? "true" : void 0,
982
+ className: getOptionLabelClasses(appearance, isSelected),
983
+ children: option.label
984
+ }
985
+ ),
986
+ option.description ? /* @__PURE__ */ jsx(
987
+ "span",
988
+ {
989
+ id: optDescId,
990
+ className: "mosaic-forms-radiogroup-option-description text-sm text-slate-500",
991
+ children: option.description
992
+ }
993
+ ) : null
994
+ ] })
995
+ ]
996
+ },
997
+ option.value
998
+ );
906
999
  })
907
1000
  }
908
1001
  ),