@recursica/mui-adapter 0.21.1 → 0.23.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 (74) hide show
  1. package/ARCHITECTURE.md +3 -0
  2. package/CHANGELOG.md +75 -0
  3. package/dist/index.d.ts +247 -41
  4. package/dist/mui-adapter.cjs +78 -78
  5. package/dist/mui-adapter.cjs.map +1 -1
  6. package/dist/mui-adapter.css +1 -1
  7. package/dist/mui-adapter.js +7624 -7311
  8. package/dist/mui-adapter.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/components/Accordion/ACCORDION_IMPLEMENTATION_NOTES.md +63 -0
  11. package/src/components/Accordion/Accordion.module.css +21 -2
  12. package/src/components/Accordion/Accordion.stories.tsx +38 -0
  13. package/src/components/Accordion/Accordion.tsx +27 -12
  14. package/src/components/AssistiveElement/ASSISTIVEELEMENT_IMPLEMENTATION_NOTES.md +59 -0
  15. package/src/components/AssistiveElement/AssistiveElement.module.css +8 -1
  16. package/src/components/AssistiveElement/AssistiveElement.tsx +17 -7
  17. package/src/components/Autocomplete/Autocomplete.tsx +18 -2
  18. package/src/components/Avatar/AVATAR_IMPLEMENTATION_NOTES.md +36 -0
  19. package/src/components/Avatar/Avatar.tsx +6 -9
  20. package/src/components/Badge/Badge.module.css +0 -12
  21. package/src/components/Badge/Badge.tsx +0 -4
  22. package/src/components/Button/Button.module.css +13 -0
  23. package/src/components/Card/Card.tsx +5 -5
  24. package/src/components/Checkbox/Checkbox.module.css +17 -21
  25. package/src/components/Checkbox/Checkbox.tsx +24 -18
  26. package/src/components/Chip/CHIP_IMPLEMENTATION_NOTES.md +102 -0
  27. package/src/components/Chip/Chip.module.css +46 -11
  28. package/src/components/Chip/Chip.tsx +41 -5
  29. package/src/components/Chip/USAGE.md +19 -0
  30. package/src/components/FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md +249 -0
  31. package/src/components/FileUpload/FileUpload.module.css +203 -38
  32. package/src/components/FileUpload/FileUpload.stories.tsx +348 -4
  33. package/src/components/FileUpload/FileUpload.tsx +350 -6
  34. package/src/components/FileUpload/USAGE.md +163 -5
  35. package/src/components/Flex/Flex.tsx +1 -1
  36. package/src/components/FormControlWrapper/FORMCONTROLWRAPPER_IMPLEMENTATION_NOTES.md +35 -0
  37. package/src/components/FormControlWrapper/FormControlWrapper.tsx +24 -8
  38. package/src/components/Grid/Grid.tsx +1 -1
  39. package/src/components/Group/Group.tsx +1 -1
  40. package/src/components/HoverCard/HoverCard.tsx +1 -1
  41. package/src/components/Label/Label.module.css +15 -2
  42. package/src/components/Label/Label.tsx +7 -6
  43. package/src/components/Menu/Menu.tsx +1 -1
  44. package/src/components/Modal/Modal.tsx +1 -1
  45. package/src/components/NumberInput/NumberInput.tsx +1 -1
  46. package/src/components/Pagination/Pagination.tsx +1 -1
  47. package/src/components/Panel/Panel.tsx +1 -1
  48. package/src/components/Radio/Radio.module.css +33 -38
  49. package/src/components/Radio/Radio.tsx +58 -44
  50. package/src/components/Radio/RadioGroup.tsx +5 -0
  51. package/src/components/SegmentedControl/SegmentedControl.module.css +0 -7
  52. package/src/components/SegmentedControl/SegmentedControl.tsx +4 -8
  53. package/src/components/Slider/Slider.tsx +1 -1
  54. package/src/components/Stack/Stack.tsx +1 -1
  55. package/src/components/Stepper/Stepper.tsx +3 -3
  56. package/src/components/Switch/SWITCH_IMPLEMENTATION_NOTES.md +123 -0
  57. package/src/components/Switch/Switch.module.css +152 -89
  58. package/src/components/Switch/Switch.tsx +140 -33
  59. package/src/components/Switch/SwitchGroup.tsx +37 -9
  60. package/src/components/Table/Table.tsx +1 -1
  61. package/src/components/Tabs/IMPLEMENTATION_NOTES.md +10 -0
  62. package/src/components/Tabs/Tabs.module.css +120 -43
  63. package/src/components/Tabs/Tabs.stories.tsx +5 -2
  64. package/src/components/Tabs/Tabs.tsx +1 -1
  65. package/src/components/Tabs/USAGE.md +27 -11
  66. package/src/components/TextField/TextField.tsx +1 -1
  67. package/src/components/TimePicker/TimePicker.tsx +1 -1
  68. package/src/components/Timeline/Timeline.tsx +1 -1
  69. package/src/components/Timeline/TimelineItem.tsx +2 -2
  70. package/src/components/Toast/Toast.tsx +4 -4
  71. package/src/components/Tooltip/Tooltip.tsx +1 -1
  72. package/src/components/Tree/Tree.tsx +1 -1
  73. package/src/index.ts +3 -1
  74. package/src/types/mantine.d.ts +0 -7
package/ARCHITECTURE.md CHANGED
@@ -13,3 +13,6 @@ This document describes the high-level architecture and philosophy of the `@recu
13
13
 
14
14
  - Components map closely to Material UI's structure but enforce Recursica design tokens.
15
15
  - We avoid over-styling; components only diverge from MUI defaults when dictated by the Recursica design system.
16
+ - Each component adheres to the underlying UI-kit prop signature so that they can easily replace components in the existing code-base
17
+ - Recursica defines a set of common props that are shared across all framework adapters. These sometimes serve the same purpose as existing UI-kit props. In that case, the Recursica prop takes precedence and are the preferred way to achieve the desired effect.
18
+ - Adapter props are removed from the underlying UI-kit when it leads to behavior that Recursica does not support. Recursica is opinionated about the behavior of its components and does not support all of the behavior of the underlying UI-kit.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,80 @@
1
1
  # @recursica/mui-adapter
2
2
 
3
+ ## 0.23.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1c317a3: Implement the `FileUpload` component (drag-and-drop dropzone, browse-button fallback, removable file-chip list) in `mantine-adapter` and `mui-adapter`, replacing the "coming soon" stub, with a shared `RecursicaFileUploadProps`/`RecursicaFileUploadItem` contract in `adapter-common`. Also fixes `mui-adapter`'s `Chip` component's public type to allow `children` (a pre-existing type-only gap; the component already accepted them at runtime).
8
+
9
+ ### Patch Changes
10
+
11
+ - 1c317a3: `FileUpload` now surfaces a built-in error message ("File type not accepted", overridable via the new `invalidFileTypeMessage` prop) when a dropped/picked file doesn't match `accept`, shown through the standard assistive-text error slot instead of requiring the integrator to wire up `onFilesRejected` themselves. Also reverts `FileUpload`'s assistive/error rendering back to `FormControlWrapper` (file list renders above the assistive/error text again, matching every other form control).
12
+
13
+ Fixes `Chip` clipping the descender (e.g. the "g" in "image.png") off long labels — `overflow: hidden` was clipping vertically as well as horizontally, cutting off glyph ink whenever the line-height token was tighter than the font's natural ascent+descent.
14
+
15
+ - 1c317a3: `FileUpload` now supports a `maxFiles` prop (with an overridable `maxFilesMessage`, defaulting to "Maximum of {maxFiles} files allowed") that rejects files past a total-count cap the same way `accept`/`maxSize` already do.
16
+
17
+ Fixes `Chip` rendered without a real handler (`onRemove`/`onClick`/`onChange`) — such as `FileUpload`'s `readOnly` file list — still showing a pointer cursor on hover and picking up a phantom, un-styled keyboard Tab stop on its truncated label text. Both were general `Chip` bugs, not specific to `FileUpload`.
18
+
19
+ - 1c317a3: Fix `Button` showing the native browser focus outline instead of the recursica focus ring, and fix `Chip` losing its remove (X) icon behind an overflowing long label instead of truncating with an ellipsis. Adds optional `removeTabIndex`/`removeIconRef` props to `Chip` for building keyboard-navigable chip groups. Also fixes the remove icon's own focus ring rendering in the chip's neutral border color instead of the recursica focus-ring color, making it barely visible.
20
+ - Updated dependencies [1c317a3]
21
+ - Updated dependencies [1c317a3]
22
+ - Updated dependencies [1c317a3]
23
+ - Updated dependencies [1c317a3]
24
+ - @recursica/adapter-common@0.16.0
25
+
26
+ ## 0.22.0
27
+
28
+ ### Minor Changes
29
+
30
+ - 106bc34: Accordion: closed silent prop-contract conflicts where native `expanded`/`onChange`/`expandIcon`/`icon` could override Recursica's own computed state, made `variant` a real predefined union instead of a bare string, and formally supported a per-item `disabled` prop in both adapters.
31
+ Also documented `children` across all Accordion sub-components in `RecursicaAccordionProps.ts`, including a new `RecursicaAccordionPanelProps` interface for the Panel.
32
+ - 106bc34: AssistiveElement: `assistiveVariant="error"` now defaults `role="alert"` in both adapters so
33
+ error text is announced by assistive tech as it appears or changes (an explicit `role` still
34
+ wins). Also (MUI only) closed a prop-contract conflict where native `error`/`component` could
35
+ silently override Recursica's own computed values, added the missing `RecursicaOverStyled`
36
+ wrapper, and hardened a CSS specificity tie against MUI's own `.Mui-error` color. Documented
37
+ `children` in `RecursicaAssistiveElementProps.ts` and added implementation notes to both adapters.
38
+
39
+ ### Patch Changes
40
+
41
+ - 106bc34: Autocomplete (MUI): fixed four bugs, all traced to `renderInput` discarding MUI's `InputProps` (dropping the `classes.inputRoot` className, the anchor ref, and adornment slots). Restored `InputProps` so the design-system border/padding actually applies instead of MUI's default underline chrome; wired `leftSection`/`rightSection` into `startAdornment`/`endAdornment` (previously destructured but never rendered, so icons never showed); and stopped coercing `error` to a boolean before the wrapper, which was discarding the error message string (ErrorState story showed no assistive text).
42
+ - 106bc34: Avatar (MUI): fixed `variant` being fed into MUI's native shape prop instead of a color treatment, making it a silent no-op. Also documented `children` in the shared prop types and added missing mui-adapter implementation notes.
43
+ - 106bc34: Checkbox (MUI): fixed the checkmark never appearing on click — `checked` was always
44
+ forced onto MUI's native input even for plain uncontrolled usage (no `checked`/only
45
+ `defaultChecked`), pinning it to a value that never updates after the initial render.
46
+ Now only forced when grouped (CheckboxGroup owns state) or the caller explicitly passes
47
+ `checked`, matching the existing `Switch` pattern. Also fixed the label rendering
48
+ vertically offset from the checkbox (`.labelWrapper` needed `display: flex` to blockify
49
+ the native inline `<label>`, mirroring Mantine's own wrapper) and the checkmark icon
50
+ rendering off-center inside the box in both standalone Checkbox and CheckboxGroup
51
+ (`.input` now centers its icon child directly).
52
+ - 106bc34: Disabled Checkbox/Switch's MUI-default click ripple (not present in Mantine) and made their description/error text mutually exclusive (error wins), matching the same fixes just made to Radio.
53
+ - 106bc34: Chip (MUI): fixed three visual bugs vs `mantine-adapter` — extra right padding on short-text chips (duplicate `min-width`/`max-width` applied on both `.root` and `.label`, now only on `.root`), delete/leading icon color and spacing leaking MUI's own default styles (fixed via CSS specificity match on `.leadingIcon`/`.removeIconWrapper`), and a missing icon-text gap on the leading icon (accidental blanket `margin: 0` collapsed it — restored `margin-right` for the gap, matching the selected-state check icon).
54
+ - 106bc34: FormControlWrapper (MUI): fixed ARIA wiring to match the Mantine adapter — a self-generated
55
+ `id` fallback (via `useId`) now fires by default instead of only when a caller supplies their
56
+ own `id`, and help/error text each get their own id (`aria-describedby`/`aria-errormessage`)
57
+ instead of sharing one. Neither attribute is set if the child already has its own explicit
58
+ value.
59
+ - 106bc34: Label (MUI): fixed focused descendant controls (e.g. a grouped Switch/Checkbox) bleeding MUI's default blue into the label text, mirroring the existing `.Mui-error` override with a matching `.Mui-focused` one.
60
+ - 106bc34: Label (MUI): fixed optional text rendering inline next to the label instead of on its own line — `innerLayout` now wraps and `optionalText` is forced onto a full-width row, matching `mantine-adapter`.
61
+ - 106bc34: Audited every component for the "spread after computed props" ordering bug (caller props silently overriding internal className/classes/icon/sx/onChange) and reordered spread-first in ~25 components. See COMPONENT_DEV_GUIDE.md §3.2 (adapter-common) for the rule.
62
+ - 106bc34: Removed leftover literal Mantine references from mui-adapter CSS/types (dead `:global(.mantine-*)` selectors, unused classes wiring, a stray `@mantine/core` type augmentation) and swapped a hardcoded Mantine red for the real error-text token in Radio/Checkbox/Switch.
63
+ - 106bc34: Radio/Checkbox/Switch description and error text now render through the shared `AssistiveElement` component instead of locally styled divs, removing the last hardcoded hex values (Mantine's default dimmed gray) from mui-adapter CSS.
64
+ - 106bc34: Fixed Radio rendering no visible circle (only the label) — `classes` was being read as `classNames` with Mantine-shaped slot names MUI doesn't support, so the circle's styling was silently dropped. Also fixed the label rendering vertically offset from the circle, disabled MUI's default click ripple, made description/error mutually exclusive (error wins), and reordered the props spread so it can no longer silently override the render-critical props placed after it.
65
+ - 106bc34: Fixed RadioGroup selection not updating in mui-adapter — its onChange was typed and wired as MUI's native `(event, value)`, but Mantine's RadioGroup (the cross-adapter source of truth) only ever calls back with `(value)`. Normalized the shared contract and mui-adapter's wiring to single-argument.
66
+ - 106bc34: Switch: attached `SwitchGroup` as the `Switch.Group` compound export (it existed standalone but was never attached), and tightened `RecursicaSwitchGroupProps` value types from `unknown[]` to `string[]`.
67
+ - 106bc34: Switch (MUI): `SwitchGroup` now actually controls its children via a `SwitchGroupContext` (same pattern as `Checkbox`/`CheckboxGroup`) — previously `value`/`defaultValue`/`onChange` were destructured and discarded, so grouped switches never checked or updated.
68
+ - 106bc34: SwitchGroup: fixed `side-by-side` layout always rendering as if stacked — the group was capped to the switch-item label's own 200px max-width, narrower than the mandatory 224px label column, guaranteeing a wrap.
69
+ - 106bc34: Switch (MUI): fixed track/thumb geometry, checked-state color and opacity, thumb icon, disabled-state opacity, the focus ring target/color, and a `classes`/`classNames` prop bug — bringing it to visual parity with `mantine-adapter`.
70
+ - 106bc34: Tabs (MUI): fixed missing `value` on `Tabs` (never read `TabContext`, so no tab was ever selected), the panel rendering beside instead of below the tab list, and dead `.Mui-selected`/`.panel` CSS selectors.
71
+ - Updated dependencies [106bc34]
72
+ - Updated dependencies [106bc34]
73
+ - Updated dependencies [106bc34]
74
+ - Updated dependencies [106bc34]
75
+ - Updated dependencies [106bc34]
76
+ - @recursica/adapter-common@0.15.0
77
+
3
78
  ## 0.21.1
4
79
 
5
80
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { AccordionDetailsProps } from '@mui/material';
2
2
  import { AccordionProps as AccordionProps_2 } from '@mui/material';
3
- import { AccordionSummaryOwnProps } from '@mui/material';
4
3
  import { AccordionSummaryProps } from '@mui/material';
5
4
  import { AlertProps } from '@mui/material';
6
5
  import { AutocompleteProps } from '@mui/material';
@@ -8,7 +7,6 @@ import { AvatarProps as AvatarProps_2 } from '@mui/material';
8
7
  import { BadgeProps as BadgeProps_2 } from '@mui/material';
9
8
  import { BoxProps as BoxProps_2 } from '@mui/material';
10
9
  import { BreadcrumbsProps } from '@mui/material';
11
- import { ButtonBaseOwnProps } from '@mui/material';
12
10
  import { ButtonProps as ButtonProps_2 } from '@mui/material';
13
11
  import { CardOwnProps } from '@mui/material';
14
12
  import { CardProps as CardProps_2 } from '@mui/material';
@@ -85,13 +83,9 @@ declare type AccordionComponent = typeof AccordionBase & {
85
83
 
86
84
  export declare const AccordionControl: typeof rawComponents.AccordionControl;
87
85
 
88
- declare const AccordionControl_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<AccordionSummaryOwnProps & Omit<ButtonBaseOwnProps, "classes"> & CommonProps & Omit<default_2.DetailedHTMLProps<default_2.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "className" | "classes" | "style" | "sx" | "tabIndex" | "children" | "disabled" | "slots" | "slotProps" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "expandIcon"> & {
89
- component?: default_2.ElementType | undefined;
90
- } & RecursicaAccordionControlProps>, BlockedStylingKeys> & ForbiddenStyles & {
86
+ declare const AccordionControl_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<AccordionSummaryProps, "expandIcon"> & RecursicaAccordionControlProps>, BlockedStylingKeys> & ForbiddenStyles & {
91
87
  overStyled?: false | undefined;
92
- }, "ref"> | Omit<Omit<AccordionSummaryOwnProps & Omit<ButtonBaseOwnProps, "classes"> & CommonProps & Omit<default_2.DetailedHTMLProps<default_2.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "className" | "classes" | "style" | "sx" | "tabIndex" | "children" | "disabled" | "slots" | "slotProps" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "expandIcon"> & {
93
- component?: default_2.ElementType | undefined;
94
- } & RecursicaAccordionControlProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
88
+ }, "ref"> | Omit<Omit<Omit<AccordionSummaryProps, "expandIcon"> & RecursicaAccordionControlProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
95
89
  m?: string | number | RecursicaSpacing;
96
90
  mx?: string | number | RecursicaSpacing;
97
91
  my?: string | number | RecursicaSpacing;
@@ -106,16 +100,16 @@ component?: default_2.ElementType | undefined;
106
100
  overStyled: true;
107
101
  }, "ref">) & default_2.RefAttributes<HTMLDivElement>>;
108
102
 
109
- declare type AccordionControlWrapperProps = RecursicaOverStyled<AccordionSummaryProps & RecursicaAccordionControlProps>;
103
+ declare type AccordionControlWrapperProps = RecursicaOverStyled<Omit<AccordionSummaryProps, "expandIcon"> & RecursicaAccordionControlProps>;
110
104
 
111
105
  export declare const AccordionItem: typeof rawComponents.AccordionItem;
112
106
 
113
- declare const AccordionItem_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<AccordionProps_2, "value" | "children"> & {
107
+ declare const AccordionItem_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<AccordionProps_2, "value" | "children" | "onChange" | "defaultExpanded" | "expanded"> & {
114
108
  children?: default_2.ReactNode;
115
109
  value: string;
116
110
  } & RecursicaAccordionItemProps>, BlockedStylingKeys> & ForbiddenStyles & {
117
111
  overStyled?: false | undefined;
118
- }, "ref"> | Omit<Omit<Omit<AccordionProps_2, "value" | "children"> & {
112
+ }, "ref"> | Omit<Omit<Omit<AccordionProps_2, "value" | "children" | "onChange" | "defaultExpanded" | "expanded"> & {
119
113
  children?: default_2.ReactNode;
120
114
  value: string;
121
115
  } & RecursicaAccordionItemProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
@@ -133,16 +127,16 @@ value: string;
133
127
  overStyled: true;
134
128
  }, "ref">) & default_2.RefAttributes<HTMLDivElement>>;
135
129
 
136
- declare type AccordionItemWrapperProps = RecursicaOverStyled<Omit<AccordionProps_2, "children" | "value"> & {
130
+ declare type AccordionItemWrapperProps = RecursicaOverStyled<Omit<AccordionProps_2, "children" | "value" | "expanded" | "onChange" | "defaultExpanded"> & {
137
131
  children?: default_2.ReactNode;
138
132
  value: string;
139
133
  } & RecursicaAccordionItemProps>;
140
134
 
141
135
  export declare const AccordionPanel: typeof rawComponents.AccordionPanel;
142
136
 
143
- declare const AccordionPanel_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<AccordionDetailsProps>, BlockedStylingKeys> & ForbiddenStyles & {
137
+ declare const AccordionPanel_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<AccordionDetailsProps & RecursicaAccordionPanelProps>, BlockedStylingKeys> & ForbiddenStyles & {
144
138
  overStyled?: false | undefined;
145
- }, "ref"> | Omit<Omit<AccordionDetailsProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
139
+ }, "ref"> | Omit<Omit<AccordionDetailsProps & RecursicaAccordionPanelProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
146
140
  m?: string | number | RecursicaSpacing;
147
141
  mx?: string | number | RecursicaSpacing;
148
142
  my?: string | number | RecursicaSpacing;
@@ -157,17 +151,30 @@ declare const AccordionPanel_2: default_2.ForwardRefExoticComponent<(Omit<Omit<W
157
151
  overStyled: true;
158
152
  }, "ref">) & default_2.RefAttributes<HTMLDivElement>>;
159
153
 
160
- declare type AccordionPanelWrapperProps = RecursicaOverStyled<AccordionDetailsProps>;
154
+ declare type AccordionPanelWrapperProps = RecursicaOverStyled<AccordionDetailsProps & RecursicaAccordionPanelProps>;
161
155
 
162
156
  declare type AccordionProps = RecursicaOverStyled<default_2.HTMLAttributes<HTMLDivElement> & RecursicaAccordionProps>;
163
157
 
164
158
  export declare const AssistiveElement: typeof rawComponents.AssistiveElement;
165
159
 
166
- declare const AssistiveElement_2: default_2.ForwardRefExoticComponent<Omit<AssistiveElementProps, "ref"> & default_2.RefAttributes<HTMLParagraphElement>>;
160
+ declare const AssistiveElement_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<FormHelperTextProps, "component" | "error"> & RecursicaAssistiveElementProps>, BlockedStylingKeys> & ForbiddenStyles & {
161
+ overStyled?: false | undefined;
162
+ }, "ref"> | Omit<Omit<Omit<FormHelperTextProps, "component" | "error"> & RecursicaAssistiveElementProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
163
+ m?: string | number | RecursicaSpacing;
164
+ mx?: string | number | RecursicaSpacing;
165
+ my?: string | number | RecursicaSpacing;
166
+ mt?: string | number | RecursicaSpacing;
167
+ mb?: string | number | RecursicaSpacing;
168
+ ml?: string | number | RecursicaSpacing;
169
+ mr?: string | number | RecursicaSpacing;
170
+ gap?: string | number | RecursicaSpacing;
171
+ rowGap?: string | number | RecursicaSpacing;
172
+ columnGap?: string | number | RecursicaSpacing;
173
+ } & {
174
+ overStyled: true;
175
+ }, "ref">) & default_2.RefAttributes<HTMLParagraphElement>>;
167
176
 
168
- declare interface AssistiveElementProps extends FormHelperTextProps, RecursicaAssistiveElementProps {
169
- overStyled?: boolean;
170
- }
177
+ declare type AssistiveElementProps = RecursicaOverStyled<Omit<FormHelperTextProps, "error" | "component"> & RecursicaAssistiveElementProps>;
171
178
 
172
179
  export declare const Autocomplete: typeof rawComponents.Autocomplete;
173
180
 
@@ -197,9 +204,9 @@ export declare const Avatar: typeof rawComponents.Avatar;
197
204
  *
198
205
  * Supports polymorphism via the `component` prop or `renderRoot` for custom element rendering.
199
206
  */
200
- declare const Avatar_2: ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<AvatarProps_2, "color" | "variant" | "size" | "radius"> & RecursicaAvatarProps>, BlockedStylingKeys> & ForbiddenStyles & {
207
+ declare const Avatar_2: ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<AvatarProps_2, "variant"> & RecursicaAvatarProps>, BlockedStylingKeys> & ForbiddenStyles & {
201
208
  overStyled?: false | undefined;
202
- }, "ref"> | Omit<Omit<Omit<AvatarProps_2, "color" | "variant" | "size" | "radius"> & RecursicaAvatarProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
209
+ }, "ref"> | Omit<Omit<Omit<AvatarProps_2, "variant"> & RecursicaAvatarProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
203
210
  m?: string | number | RecursicaSpacing;
204
211
  mx?: string | number | RecursicaSpacing;
205
212
  my?: string | number | RecursicaSpacing;
@@ -214,7 +221,7 @@ columnGap?: string | number | RecursicaSpacing;
214
221
  overStyled: true;
215
222
  }, "ref">) & RefAttributes<HTMLDivElement>>;
216
223
 
217
- declare type AvatarProps = RecursicaOverStyled<Omit<AvatarProps_2, "variant" | "size" | "color" | "radius"> & RecursicaAvatarProps>;
224
+ declare type AvatarProps = RecursicaOverStyled<Omit<AvatarProps_2, "variant"> & RecursicaAvatarProps>;
218
225
 
219
226
  export declare const Badge: typeof rawComponents.Badge;
220
227
 
@@ -399,9 +406,13 @@ declare type CheckboxWrapperProps = Omit<CheckboxProps_2, "size" | "color"> & Re
399
406
 
400
407
  export declare const Chip: typeof rawComponents.Chip;
401
408
 
402
- declare const Chip_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<ChipProps_2, "color" | "variant" | "size" | "radius"> & RecursicaChipProps>, BlockedStylingKeys> & ForbiddenStyles & {
409
+ declare const Chip_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<ChipProps_2, "color" | "children" | "variant" | "size" | "radius"> & RecursicaChipProps & {
410
+ children?: default_2.ReactNode;
411
+ }>, BlockedStylingKeys> & ForbiddenStyles & {
403
412
  overStyled?: false | undefined;
404
- }, "ref"> | Omit<Omit<Omit<ChipProps_2, "color" | "variant" | "size" | "radius"> & RecursicaChipProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
413
+ }, "ref"> | Omit<Omit<Omit<ChipProps_2, "color" | "children" | "variant" | "size" | "radius"> & RecursicaChipProps & {
414
+ children?: default_2.ReactNode;
415
+ }, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
405
416
  m?: string | number | RecursicaSpacing;
406
417
  mx?: string | number | RecursicaSpacing;
407
418
  my?: string | number | RecursicaSpacing;
@@ -416,7 +427,9 @@ declare const Chip_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursi
416
427
  overStyled: true;
417
428
  }, "ref">) & default_2.RefAttributes<HTMLInputElement>>;
418
429
 
419
- declare type ChipProps = RecursicaOverStyled<Omit<ChipProps_2, "variant" | "size" | "color" | "radius"> & RecursicaChipProps>;
430
+ declare type ChipProps = RecursicaOverStyled<Omit<ChipProps_2, "variant" | "size" | "color" | "radius" | "children"> & RecursicaChipProps & {
431
+ children?: default_2.ReactNode;
432
+ }>;
420
433
 
421
434
  export declare const Container: ForwardRefExoticComponent<Omit<rawComponents.ContainerProps, "ref"> & RefAttributes<HTMLDivElement>>;
422
435
 
@@ -494,11 +507,47 @@ declare const FileInput_2: default_2.FC<FileInputProps>;
494
507
 
495
508
  declare type FileInputProps = default_2.HTMLAttributes<HTMLDivElement>;
496
509
 
497
- export declare const FileUpload: FC<rawComponents.FileUploadProps>;
510
+ /**
511
+ * Mirrors the semantics of the native HTML `accept` attribute (comma-separated file extensions,
512
+ * MIME types, or MIME wildcards like `image/*`) so drag-and-drop can be validated the same way —
513
+ * the browser only applies `accept` to its own file-picker dialog, never to a `drop` event, so
514
+ * without this a dropped file bypasses the restriction entirely.
515
+ */
516
+ export declare function fileMatchesAccept(file: File, accept?: string): boolean;
517
+
518
+ export declare const FileUpload: typeof rawComponents.FileUpload;
498
519
 
499
- declare const FileUpload_2: default_2.FC<FileUploadProps>;
520
+ /**
521
+ * A dropzone for uploading files, with a native browse-button fallback and a
522
+ * removable-chip list of the currently selected files.
523
+ *
524
+ * @example
525
+ * <FileUpload
526
+ * label="Upload Files"
527
+ * assistiveText="Max file size 5MB"
528
+ * files={files}
529
+ * onFilesAdded={(added) => setFiles((f) => [...f, ...added.map((file) => ({ file }))])}
530
+ * onFileRemove={(id) => setFiles((f) => f.filter((item) => (item.id ?? item.file.name) !== id))}
531
+ * />
532
+ */
533
+ declare const FileUpload_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<RecursicaFileUploadProps_2>, BlockedStylingKeys> & ForbiddenStyles & {
534
+ overStyled?: false | undefined;
535
+ }, "ref"> | Omit<Omit<RecursicaFileUploadProps_2, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
536
+ m?: string | number | RecursicaSpacing;
537
+ mx?: string | number | RecursicaSpacing;
538
+ my?: string | number | RecursicaSpacing;
539
+ mt?: string | number | RecursicaSpacing;
540
+ mb?: string | number | RecursicaSpacing;
541
+ ml?: string | number | RecursicaSpacing;
542
+ mr?: string | number | RecursicaSpacing;
543
+ gap?: string | number | RecursicaSpacing;
544
+ rowGap?: string | number | RecursicaSpacing;
545
+ columnGap?: string | number | RecursicaSpacing;
546
+ } & {
547
+ overStyled: true;
548
+ }, "ref">) & default_2.RefAttributes<HTMLDivElement>>;
500
549
 
501
- declare type FileUploadProps = default_2.HTMLAttributes<HTMLDivElement>;
550
+ declare type FileUploadProps = RecursicaOverStyled<RecursicaFileUploadProps_2>;
502
551
 
503
552
  export declare const Flex: ForwardRefExoticComponent<Omit<rawComponents.FlexProps, "ref"> & RefAttributes<HTMLDivElement>>;
504
553
 
@@ -999,6 +1048,8 @@ declare namespace rawComponents {
999
1048
  Dropdown_2 as Dropdown,
1000
1049
  FileInputProps,
1001
1050
  FileInput_2 as FileInput,
1051
+ RecursicaFileUploadItem,
1052
+ RecursicaFileUploadProps_2 as RecursicaFileUploadProps,
1002
1053
  FileUploadProps,
1003
1054
  FileUpload_2 as FileUpload,
1004
1055
  FlexProps,
@@ -1078,6 +1129,7 @@ declare namespace rawComponents {
1078
1129
  RecursicaSwitchPropsAlias,
1079
1130
  SwitchProps_2 as SwitchProps,
1080
1131
  Switch_2 as Switch,
1132
+ SwitchGroupContext,
1081
1133
  RecursicaSwitchGroupProps_2 as RecursicaSwitchGroupProps,
1082
1134
  SwitchGroupProps,
1083
1135
  SwitchGroup_2 as SwitchGroup,
@@ -1169,6 +1221,8 @@ export declare const RECURSICA_COMPONENTS: readonly ["Accordion", "AssistiveElem
1169
1221
  * Props for the Recursica Accordion Control component.
1170
1222
  */
1171
1223
  export declare interface RecursicaAccordionControlProps {
1224
+ /** The control's label content */
1225
+ children?: default_2.ReactNode;
1172
1226
  /** Leading icon displayed inside the control boundary */
1173
1227
  leftIcon?: default_2.ReactNode;
1174
1228
  }
@@ -1177,7 +1231,14 @@ export declare interface RecursicaAccordionControlProps {
1177
1231
  * Props for the Recursica Accordion Item component.
1178
1232
  */
1179
1233
  export declare interface RecursicaAccordionItemProps {
1180
- /** The text or element label for the item control */
1234
+ /**
1235
+ * When `title` is set, this is the panel content — the control and panel are constructed
1236
+ * automatically, with `children` becoming the panel body. When `title` is omitted, this is
1237
+ * expected to be a manually composed `Accordion.Control`/`Accordion.Panel` pair instead.
1238
+ */
1239
+ children?: default_2.ReactNode;
1240
+ /** The text or element label for the item control. When set, the control and panel are
1241
+ * constructed automatically; omit it to compose the control and panel manually instead. */
1181
1242
  title?: default_2.ReactNode;
1182
1243
  /** Leading icon for the item control */
1183
1244
  leftIcon?: default_2.ReactNode;
@@ -1185,14 +1246,30 @@ export declare interface RecursicaAccordionItemProps {
1185
1246
  divider?: boolean;
1186
1247
  /** Unique value identifier for this item */
1187
1248
  value?: string;
1249
+ /** Disables interaction with this item — it can't be expanded or collapsed, and is dimmed */
1250
+ disabled?: boolean;
1251
+ }
1252
+
1253
+ /**
1254
+ * Props for the Recursica Accordion Panel component.
1255
+ */
1256
+ export declare interface RecursicaAccordionPanelProps {
1257
+ /** The panel's content, shown when the item is expanded */
1258
+ children?: default_2.ReactNode;
1188
1259
  }
1189
1260
 
1190
1261
  /**
1191
1262
  * Props for the Recursica Accordion container component.
1192
1263
  */
1193
1264
  export declare interface RecursicaAccordionProps {
1194
- /** The styling variant of the accordion */
1195
- variant?: string;
1265
+ /** The `Accordion.Item` elements that make up the accordion */
1266
+ children?: default_2.ReactNode;
1267
+ /**
1268
+ * The styling variant of the accordion. `"default"` is the only variant with dedicated
1269
+ * Recursica styling today; any other string is accepted for advanced/custom theming but
1270
+ * has no guaranteed styling.
1271
+ */
1272
+ variant?: "default" | (string & {});
1196
1273
  /** Current expanded value(s) in controlled mode */
1197
1274
  value?: string | string[];
1198
1275
  /** Initial expanded value(s) in uncontrolled mode */
@@ -1201,7 +1278,8 @@ export declare interface RecursicaAccordionProps {
1201
1278
  onChange?: (value: string | string[] | null) => void;
1202
1279
  /** Allow multiple panels to be open simultaneously */
1203
1280
  multiple?: boolean;
1204
- /** Custom chevron icon to replace the default expand/collapse indicator */
1281
+ /** Custom chevron icon to replace the default expand/collapse indicator. Applies to every
1282
+ * item; a single item's control can still override it individually. */
1205
1283
  chevron?: default_2.ReactNode;
1206
1284
  }
1207
1285
 
@@ -1209,9 +1287,14 @@ export declare interface RecursicaAccordionProps {
1209
1287
  * Props for the Recursica AssistiveElement component.
1210
1288
  */
1211
1289
  export declare interface RecursicaAssistiveElementProps {
1212
- /** The semantic variant driving the icon and text colors */
1290
+ /** The helper or error text content */
1291
+ children?: default_2.ReactNode;
1292
+ /** The semantic variant driving the icon and text colors. `"error"` also defaults the
1293
+ * element's `role` to `"alert"` so assistive tech announces it as it appears or changes —
1294
+ * pass an explicit `role` to override. */
1213
1295
  assistiveVariant?: "help" | "error";
1214
- /** Explicitly toggle the rendering of the variant-specific SVG icon */
1296
+ /** Explicitly toggle the rendering of the variant-specific SVG icon. There is no slot for a
1297
+ * custom icon — the icon is always the fixed one belonging to the current `assistiveVariant`. */
1215
1298
  assistiveWithIcon?: boolean;
1216
1299
  }
1217
1300
 
@@ -1246,6 +1329,8 @@ declare interface RecursicaAutocompleteProps_2 {
1246
1329
  * Props for the Recursica Avatar component.
1247
1330
  */
1248
1331
  export declare interface RecursicaAvatarProps {
1332
+ /** Initials or other text fallback, shown when neither `src` nor `icon` is set */
1333
+ children?: default_2.ReactNode;
1249
1334
  /** Size of the avatar */
1250
1335
  size?: "small" | "default" | "large";
1251
1336
  /** Visual variant style */
@@ -1347,6 +1432,17 @@ export declare interface RecursicaChipProps {
1347
1432
  removeLabel?: string;
1348
1433
  /** Checked state for the chip (acts as a checkbox) */
1349
1434
  checked?: boolean;
1435
+ /**
1436
+ * Tab index for the remove (X) icon. Defaults to `0`. Lets a parent implement a roving-tabindex
1437
+ * pattern across a group of chips (e.g. FileUpload's file list) by setting this to `-1` on every
1438
+ * chip except the currently-active one.
1439
+ */
1440
+ removeTabIndex?: number;
1441
+ /**
1442
+ * Ref to the remove (X) icon element, so a parent can move focus to it imperatively — e.g.
1443
+ * arrow-key navigation across a group of chips.
1444
+ */
1445
+ removeIconRef?: default_2.Ref<HTMLSpanElement>;
1350
1446
  }
1351
1447
 
1352
1448
  /**
@@ -1397,6 +1493,102 @@ declare interface RecursicaDropdownProps_2 {
1397
1493
  placeholder?: string;
1398
1494
  }
1399
1495
 
1496
+ /**
1497
+ * A single file entry rendered as a removable chip in the FileUpload's file list.
1498
+ */
1499
+ export declare interface RecursicaFileUploadItem {
1500
+ /** The underlying browser File object. */
1501
+ file: File;
1502
+ /**
1503
+ * Stable identifier for this entry, used as the React key and passed back to
1504
+ * `onFileRemove`. Defaults to the file's `name` when not provided.
1505
+ */
1506
+ id?: string;
1507
+ }
1508
+
1509
+ /**
1510
+ * Props for the Recursica FileUpload component.
1511
+ */
1512
+ export declare interface RecursicaFileUploadProps {
1513
+ /**
1514
+ * Files currently selected, rendered as removable chips below the dropzone.
1515
+ * This is a controlled list — `onFilesAdded`/`onFileRemove` report changes, but
1516
+ * `FileUpload` never mutates this array itself; merge the reported changes into
1517
+ * your own state and pass the updated list back in.
1518
+ */
1519
+ files?: RecursicaFileUploadItem[];
1520
+ /**
1521
+ * Called with the files the user just dropped onto the dropzone or picked via
1522
+ * the browse button. Only the newly added files are passed — merge them into
1523
+ * `files` yourself (e.g. to assign an `id`, dedupe, or reject some of them).
1524
+ */
1525
+ onFilesAdded?: (files: File[]) => void;
1526
+ /**
1527
+ * Called when a file chip's remove (X) icon is activated, identified by its
1528
+ * `id` (or `file.name` when no `id` was given for that entry).
1529
+ */
1530
+ onFileRemove?: (id: string) => void;
1531
+ /**
1532
+ * Native `accept` attribute for the underlying file input (e.g. `".pdf,.png"`
1533
+ * or `"image/*"`) — constrains the browse-button file picker natively. Also
1534
+ * enforced against files dropped onto the dropzone: the browser only applies
1535
+ * `accept` to its own file-picker dialog, never to a `drop` event, so files
1536
+ * that don't match are rejected the same way (see `onFilesRejected`) rather
1537
+ * than silently bypassing the restriction.
1538
+ */
1539
+ accept?: string;
1540
+ /** Whether more than one file can be selected/dropped at once. Defaults to `true`. */
1541
+ multiple?: boolean;
1542
+ /**
1543
+ * Maximum size per file, in bytes. Files exceeding this are passed to
1544
+ * `onFilesRejected` instead of `onFilesAdded`.
1545
+ */
1546
+ maxSize?: number;
1547
+ /**
1548
+ * Maximum total number of files allowed in `files`. Once reached, further
1549
+ * dropped/picked files are passed to `onFilesRejected` instead of
1550
+ * `onFilesAdded`.
1551
+ */
1552
+ maxFiles?: number;
1553
+ /**
1554
+ * Called with any files rejected for exceeding `maxSize`/`maxFiles` or not
1555
+ * matching `accept`.
1556
+ */
1557
+ onFilesRejected?: (files: File[]) => void;
1558
+ /**
1559
+ * Error message shown (via the standard assistive-text error slot) when a
1560
+ * dropped/picked file's extension or MIME type doesn't match `accept`.
1561
+ * Defaults to `"File type not accepted"`.
1562
+ */
1563
+ invalidFileTypeMessage?: default_2.ReactNode;
1564
+ /**
1565
+ * Error message shown (via the standard assistive-text error slot) when a
1566
+ * dropped/picked file would exceed `maxFiles`. Defaults to
1567
+ * `"Maximum of {maxFiles} files allowed"`.
1568
+ */
1569
+ maxFilesMessage?: default_2.ReactNode;
1570
+ /** Icon shown above the dropzone label. Defaults to the built-in upload icon. */
1571
+ icon?: default_2.ReactNode;
1572
+ /** Text shown inside the dropzone. Defaults to `"Drag and drop files here to upload"`. */
1573
+ dropzoneLabel?: default_2.ReactNode;
1574
+ /** Label for the button that opens the native file picker. Defaults to `"Browse files"`. */
1575
+ browseButtonLabel?: default_2.ReactNode;
1576
+ /** Screen-reader label for each file chip's remove button. Defaults to `"Remove"`. */
1577
+ removeFileLabel?: string;
1578
+ /** Disables the dropzone, browse button, and every file chip's remove icon. */
1579
+ disabled?: boolean;
1580
+ /**
1581
+ * Renders `files` as a static list of chips with no remove icon, and omits
1582
+ * the dropzone/browse button entirely.
1583
+ */
1584
+ readOnly?: boolean;
1585
+ }
1586
+
1587
+ declare interface RecursicaFileUploadProps_2 extends Omit<default_2.HTMLAttributes<HTMLDivElement>, "children" | "onDrop" | "onChange">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth">, RecursicaFileUploadProps {
1588
+ /** Visually forces the mandatory asterisk. Accepted for API parity with other adapters; MUI's own `required` already renders the asterisk, so this has no separate effect here. */
1589
+ withAsterisk?: boolean;
1590
+ }
1591
+
1400
1592
  /**
1401
1593
  * Props for the Recursica Flex layout component.
1402
1594
  */
@@ -1697,8 +1889,13 @@ export declare interface RecursicaRadioGroupProps {
1697
1889
  value?: unknown;
1698
1890
  /** Initial selected value in uncontrolled mode */
1699
1891
  defaultValue?: unknown;
1700
- /** Callback triggered when active value changes */
1701
- onChange?: (event: any, value: string) => void;
1892
+ /**
1893
+ * Callback triggered when active value changes.
1894
+ * Single-argument by design (no event): matches Mantine's native RadioGroup
1895
+ * onChange, the cross-adapter source of truth. mui-adapter's RadioGroup
1896
+ * normalizes MUI's native two-argument (event, value) callback down to this.
1897
+ */
1898
+ onChange?: (value: string) => void;
1702
1899
  }
1703
1900
 
1704
1901
  declare interface RecursicaRadioGroupProps_2 extends Omit<RadioGroupProps_2, "size" | "labelProps" | "classes" | "ref" | "onChange" | "value" | "defaultValue">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth" | "classes" | "onChange" | keyof RadioGroupProps_2>, ReadOnlyControlProps, RecursicaRadioGroupProps {
@@ -1830,12 +2027,12 @@ declare interface RecursicaStepperPropsExtended extends Omit<Partial<StepperProp
1830
2027
  * Props for the Recursica SwitchGroup component.
1831
2028
  */
1832
2029
  export declare interface RecursicaSwitchGroupProps {
1833
- /** Checked values list in controlled mode */
1834
- value?: unknown[];
2030
+ /** Checked values list in controlled mode — each entry matches a child Switch's own `value` */
2031
+ value?: string[];
1835
2032
  /** Checked default values list in uncontrolled mode */
1836
- defaultValue?: unknown[];
2033
+ defaultValue?: string[];
1837
2034
  /** Callback triggered when any switch toggles state */
1838
- onChange?: (value: unknown[]) => void;
2035
+ onChange?: (value: string[]) => void;
1839
2036
  }
1840
2037
 
1841
2038
  declare interface RecursicaSwitchGroupProps_2 extends Omit<FormGroupProps, "size" | "labelProps" | "onChange" | "classes" | "ref" | "value" | "defaultValue">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth" | "classes" | "onChange" | "defaultValue">, ReadOnlyControlProps, RecursicaSwitchGroupProps {
@@ -2272,7 +2469,9 @@ export declare const Switch: typeof rawComponents.Switch;
2272
2469
 
2273
2470
  declare const Switch_2: SwitchComponent;
2274
2471
 
2275
- declare type SwitchComponent = React.ComponentType<SwitchProps_2>;
2472
+ declare type SwitchComponent = React.ForwardRefExoticComponent<SwitchProps_2 & React.RefAttributes<HTMLInputElement>> & {
2473
+ Group: typeof SwitchGroup_2;
2474
+ };
2276
2475
 
2277
2476
  export declare const SwitchGroup: typeof rawComponents.SwitchGroup;
2278
2477
 
@@ -2293,6 +2492,13 @@ declare const SwitchGroup_2: default_2.ForwardRefExoticComponent<(Omit<Omit<With
2293
2492
  overStyled: true;
2294
2493
  }, "ref">) & default_2.RefAttributes<HTMLDivElement>>;
2295
2494
 
2495
+ declare const SwitchGroupContext: default_2.Context<{
2496
+ value?: string[];
2497
+ onChange?: (event: default_2.SyntheticEvent, value: string[]) => void;
2498
+ name?: string;
2499
+ readOnly?: boolean;
2500
+ } | null>;
2501
+
2296
2502
  declare type SwitchGroupProps = RecursicaOverStyled<RecursicaSwitchGroupProps_2>;
2297
2503
 
2298
2504
  declare type SwitchProps_2 = RecursicaOverStyled<RecursicaSwitchPropsAlias>;