@recursica/mui-adapter 0.29.0 → 0.31.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 (32) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/index.d.ts +68 -44
  3. package/dist/mui-adapter.cjs +54 -54
  4. package/dist/mui-adapter.cjs.map +1 -1
  5. package/dist/mui-adapter.css +1 -1
  6. package/dist/mui-adapter.js +5600 -5600
  7. package/dist/mui-adapter.js.map +1 -1
  8. package/package.json +2 -2
  9. package/src/components/Accordion/Accordion.tsx +6 -1
  10. package/src/components/Checkbox/CheckboxGroup.tsx +5 -3
  11. package/src/components/Chip/CHIP_IMPLEMENTATION_NOTES.md +3 -3
  12. package/src/components/Chip/Chip.module.css +5 -5
  13. package/src/components/Chip/Chip.stories.tsx +2 -2
  14. package/src/components/Chip/Chip.tsx +20 -19
  15. package/src/components/Chip/USAGE.md +4 -4
  16. package/src/components/FileInput/FILEINPUT_IMPLEMENTATION_NOTES.md +5 -3
  17. package/src/components/FileInput/FileInput.stories.tsx +3 -0
  18. package/src/components/FileInput/FileInput.tsx +11 -10
  19. package/src/components/FileInput/USAGE.md +1 -0
  20. package/src/components/FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md +6 -6
  21. package/src/components/FileUpload/FileUpload.tsx +9 -9
  22. package/src/components/Radio/RadioGroup.stories.tsx +4 -4
  23. package/src/components/Radio/RadioGroup.tsx +1 -12
  24. package/src/components/SegmentedControl/IMPLEMENTATION_NOTES.md +8 -0
  25. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +17 -28
  26. package/src/components/SegmentedControl/SegmentedControl.tsx +15 -17
  27. package/src/components/SegmentedControl/USAGE.md +13 -0
  28. package/src/components/Slider/IMPLEMENTATION_NOTES.md +10 -0
  29. package/src/components/Slider/Slider.stories.tsx +44 -0
  30. package/src/components/Slider/Slider.tsx +23 -4
  31. package/src/components/Slider/USAGE.md +6 -0
  32. package/src/components/Switch/SwitchGroup.tsx +5 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @recursica/mui-adapter
2
2
 
3
+ ## 0.31.0
4
+
5
+ ### Minor Changes
6
+
7
+ - e4759d1: Slider: fixed the raw numeric value duplicating next to the track when `tooltipLabel` is a formatter (now reuses the same formatter), added `minLabel`/`maxLabel` overrides for the track's end labels, and added a `trailingIcon` prop alongside the existing leading `icon`.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [e4759d1]
12
+ - @recursica/adapter-common@0.22.0
13
+
14
+ ## 0.30.0
15
+
16
+ ### Minor Changes
17
+
18
+ - 0bb2dab: **Breaking:** `Chip`'s `onRemove` prop is renamed to `onDelete` in both adapters, matching MUI's own `onDelete` naming and removing the previous internal aliasing between the two. Update any `Chip` usage passing `onRemove` to `onDelete` — the behavior (rendering the remove/X icon and firing on click or Enter/Space) is unchanged. `FileInput` and `FileUpload`'s own public props are unaffected; they only consume `Chip` internally.
19
+ - 0bb2dab: Updated props with breaking changes
20
+
21
+ ### Patch Changes
22
+
23
+ - Updated dependencies [0bb2dab]
24
+ - Updated dependencies [0bb2dab]
25
+ - @recursica/adapter-common@0.21.0
26
+
3
27
  ## 0.29.0
4
28
 
5
29
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -155,7 +155,9 @@ declare const AccordionPanel_2: default_2.ForwardRefExoticComponent<(Omit<Omit<W
155
155
 
156
156
  declare type AccordionPanelWrapperProps = RecursicaOverStyled<AccordionDetailsProps & RecursicaAccordionPanelProps>;
157
157
 
158
- declare type AccordionProps = RecursicaOverStyled<default_2.HTMLAttributes<HTMLDivElement> & RecursicaAccordionProps>;
158
+ declare type AccordionProps = RecursicaOverStyled<default_2.HTMLAttributes<HTMLDivElement> & RecursicaAccordionProps & {
159
+ onChange?: (value: string | string[] | null) => void;
160
+ }>;
159
161
 
160
162
  export declare const AssistiveElement: typeof rawComponents.AssistiveElement;
161
163
 
@@ -1441,8 +1443,6 @@ export declare interface RecursicaAccordionProps {
1441
1443
  value?: string | string[];
1442
1444
  /** Initial expanded value(s) in uncontrolled mode */
1443
1445
  defaultValue?: string | string[];
1444
- /** Callback triggered when value changes */
1445
- onChange?: (value: string | string[] | null) => void;
1446
1446
  /** Allow multiple panels to be open simultaneously */
1447
1447
  multiple?: boolean;
1448
1448
  /** Custom chevron icon to replace the default expand/collapse indicator. Applies to every
@@ -1484,9 +1484,9 @@ declare interface RecursicaAutocompleteProps_2 {
1484
1484
  id?: string;
1485
1485
  /** Initial default value */
1486
1486
  defaultValue?: unknown;
1487
- /** Left section decoration (e.g. icon) */
1487
+ /** Left section decoration (e.g. icon). Naming rationale: see `RecursicaTextFieldProps.leftSection`. */
1488
1488
  leftSection?: default_2.ReactNode;
1489
- /** Right section decoration (e.g. action button) */
1489
+ /** Right section decoration (e.g. action button). Same rationale as `leftSection` above. */
1490
1490
  rightSection?: default_2.ReactNode;
1491
1491
  /** Placeholder text */
1492
1492
  placeholder?: string;
@@ -1562,13 +1562,10 @@ export declare interface RecursicaCheckboxGroupProps {
1562
1562
  value?: unknown[];
1563
1563
  /** Default selected values in uncontrolled mode */
1564
1564
  defaultValue?: unknown[];
1565
- /** Callback triggered on selection change */
1566
- onChange?: (value: unknown[]) => void;
1567
- /** Toggle horizontal row display */
1568
- row?: boolean;
1569
1565
  }
1570
1566
 
1571
1567
  declare interface RecursicaCheckboxGroupProps_2 extends Omit<default_2.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth" | "onChange" | "classes" | "withAsterisk" | "defaultValue">, ReadOnlyControlProps, RecursicaCheckboxGroupProps {
1568
+ onChange?: (value: unknown[]) => void;
1572
1569
  }
1573
1570
 
1574
1571
  /**
@@ -1594,22 +1591,22 @@ export declare interface RecursicaChipProps {
1594
1591
  /** Leading icon content */
1595
1592
  icon?: default_2.ReactNode;
1596
1593
  /** Called when the remove (X) icon is clicked. If provided, the remove icon will be displayed. */
1597
- onRemove?: (e: default_2.MouseEvent<HTMLSpanElement, MouseEvent>) => void;
1598
- /** Screen reader label for the remove button. Defaults to 'Remove' */
1599
- removeLabel?: string;
1594
+ onDelete?: (e: default_2.MouseEvent<HTMLSpanElement, MouseEvent>) => void;
1595
+ /** Screen reader label for the delete button. Defaults to 'Delete' */
1596
+ deleteLabel?: string;
1600
1597
  /** Checked state for the chip (acts as a checkbox) */
1601
1598
  checked?: boolean;
1602
1599
  /**
1603
- * Tab index for the remove (X) icon. Defaults to `0`. Lets a parent implement a roving-tabindex
1600
+ * Tab index for the delete (X) icon. Defaults to `0`. Lets a parent implement a roving-tabindex
1604
1601
  * pattern across a group of chips (e.g. FileUpload's file list) by setting this to `-1` on every
1605
1602
  * chip except the currently-active one.
1606
1603
  */
1607
- removeTabIndex?: number;
1604
+ deleteTabIndex?: number;
1608
1605
  /**
1609
- * Ref to the remove (X) icon element, so a parent can move focus to it imperatively — e.g.
1606
+ * Ref to the delete (X) icon element, so a parent can move focus to it imperatively — e.g.
1610
1607
  * arrow-key navigation across a group of chips.
1611
1608
  */
1612
- removeIconRef?: default_2.Ref<HTMLSpanElement>;
1609
+ deleteIconRef?: default_2.Ref<HTMLSpanElement>;
1613
1610
  }
1614
1611
 
1615
1612
  /**
@@ -1739,6 +1736,12 @@ export declare interface RecursicaFileInputProps {
1739
1736
  maxFilesMessage?: default_2.ReactNode;
1740
1737
  /** Leading icon shown inside the control. Defaults to the built-in upload icon. */
1741
1738
  icon?: default_2.ReactNode;
1739
+ /**
1740
+ * Trailing clear-all icon shown once a file is selected. Defaults to the built-in X icon.
1741
+ * Forge's `file-input` token set exposes a `trailing-icon` color alongside `leading-icon`
1742
+ * for exactly this slot.
1743
+ */
1744
+ clearIcon?: default_2.ReactNode;
1742
1745
  /** Text shown when no file is selected. Defaults to `"Select a file..."`. */
1743
1746
  placeholder?: default_2.ReactNode;
1744
1747
  /** Screen-reader label for the control itself. Defaults to `"Choose file"`. */
@@ -1910,7 +1913,12 @@ export declare interface RecursicaFormControlWrapperProps extends Omit<FormContr
1910
1913
  declare interface RecursicaFormControlWrapperProps_2 extends RecursicaLabelProps {
1911
1914
  /** Overall structural flow mapping the Form Control natively cascading down to Label and Input logic. */
1912
1915
  formLayout?: "stacked" | "side-by-side";
1913
- /** Securely replaces standard descriptions safely providing standard Assistive properties. */
1916
+ /**
1917
+ * Securely replaces standard descriptions safely providing standard Assistive properties.
1918
+ * Not renamed to Forge's `helpText`/`errorText`: our own vocabulary, covering both help and
1919
+ * error copy via one prop plus `assistiveVariant`; `description`/`helperText` below already
1920
+ * exist as native-API fallback aliases.
1921
+ */
1914
1922
  assistiveText?: default_2.ReactNode;
1915
1923
  /** Fallback description prop to match native APIs safely. */
1916
1924
  description?: default_2.ReactNode;
@@ -2010,15 +2018,24 @@ export declare interface RecursicaHoverCardProps {
2010
2018
  export declare interface RecursicaLabelProps {
2011
2019
  /** Specifies the sizing metrics natively mapping the Label boundaries. */
2012
2020
  labelSize?: "default" | "small" | "md";
2013
- /** Overall alignment directive for the label strings natively forcing Left/Right justification. */
2021
+ /**
2022
+ * Overall alignment directive for the label strings natively forcing Left/Right justification.
2023
+ * Not renamed to Forge's `labelAlign`: our own vocabulary, not either kit's native term.
2024
+ */
2014
2025
  labelAlignment?: "left" | "right";
2015
- /** Injects an indicator text block alongside the label. Can be boolean (`true` maps to '(Optional)') or custom React nodes. */
2026
+ /**
2027
+ * Injects an indicator text block alongside the label. Can be boolean (`true` maps to '(Optional)') or custom React nodes.
2028
+ * Not renamed to Forge's `optional`: same reason as `labelAlignment` above.
2029
+ */
2016
2030
  labelOptionalText?: boolean | default_2.ReactNode;
2017
2031
  /** When true, forces the native Edit Icon to replace the standard asterisk visually. */
2018
2032
  labelWithEditIcon?: boolean;
2019
2033
  /** Custom action area to render alongside the label instead of the default edit icon. */
2020
2034
  labelActionArea?: default_2.ReactNode;
2021
- /** Interaction hook invoked whenever a generated edit icon block natively triggers a click event. */
2035
+ /**
2036
+ * Interaction hook invoked whenever a generated edit icon block natively triggers a click event.
2037
+ * Not renamed to Forge's `onEditIconClick`: same reason as `labelAlignment` above.
2038
+ */
2022
2039
  onLabelEditClick?: default_2.MouseEventHandler<HTMLButtonElement>;
2023
2040
  }
2024
2041
 
@@ -2090,9 +2107,9 @@ export declare interface RecursicaNumberInputProps extends Omit<TextFieldProps,
2090
2107
  declare interface RecursicaNumberInputProps_2 {
2091
2108
  /** Enables/disables the controls to increment and decrement the value */
2092
2109
  hideControls?: boolean;
2093
- /** Content rendered on the left side of the input (e.g. icon) */
2110
+ /** Content rendered on the left side of the input (e.g. icon). Naming rationale: see `RecursicaTextFieldProps.leftSection`. */
2094
2111
  leftSection?: React.ReactNode;
2095
- /** Content rendered on the right side of the input (e.g. percentage sign) */
2112
+ /** Content rendered on the right side of the input (e.g. percentage sign). Same rationale as `leftSection` above. */
2096
2113
  rightSection?: React.ReactNode;
2097
2114
  /** Minimum possible value */
2098
2115
  min?: number;
@@ -2129,9 +2146,13 @@ export declare interface RecursicaPaginationProps {
2129
2146
  * Props for the Recursica Panel component.
2130
2147
  */
2131
2148
  export declare interface RecursicaPanelProps {
2132
- /** Forces header text onto a single line truncating overflow with ellipsis */
2149
+ /** Forces header text onto a single line truncating overflow with ellipsis. Default is true */
2133
2150
  wrapHeaderText?: boolean;
2134
- /** Direction or placement where the panel slides out from */
2151
+ /**
2152
+ * Direction the panel slides out from.
2153
+ * Named `placement`, not `position`: `position` is a global `BlockedStylingKeys` entry, so
2154
+ * it's typed `never` and stripped unless `overStyled: true`.
2155
+ */
2135
2156
  placement?: "top" | "bottom" | "left" | "right";
2136
2157
  /** Control visibility state */
2137
2158
  opened?: boolean;
@@ -2159,16 +2180,9 @@ export declare interface RecursicaRadioGroupProps {
2159
2180
  value?: unknown;
2160
2181
  /** Initial selected value in uncontrolled mode */
2161
2182
  defaultValue?: unknown;
2162
- /**
2163
- * Callback triggered when active value changes.
2164
- * Single-argument by design (no event): matches Mantine's native RadioGroup
2165
- * onChange, the cross-adapter source of truth. mui-adapter's RadioGroup
2166
- * normalizes MUI's native two-argument (event, value) callback down to this.
2167
- */
2168
- onChange?: (value: string) => void;
2169
2183
  }
2170
2184
 
2171
- 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 {
2185
+ declare interface RecursicaRadioGroupProps_2 extends Omit<RadioGroupProps_2, "size" | "labelProps" | "classes" | "ref" | "value" | "defaultValue">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth" | "classes" | "onChange" | keyof RadioGroupProps_2>, ReadOnlyControlProps, RecursicaRadioGroupProps {
2172
2186
  }
2173
2187
 
2174
2188
  /**
@@ -2215,18 +2229,18 @@ export declare interface RecursicaSegmentedControlProps {
2215
2229
  orientation?: "horizontal" | "vertical";
2216
2230
  /** If true, the control will stretch full-width */
2217
2231
  fullWidth?: boolean;
2218
- /** SegmentedControl explicitly forbids disabled prop */
2219
- disabled?: never;
2232
+ /** Disables every item in the control at once; a single item can still be disabled via `data` */
2233
+ disabled?: boolean;
2220
2234
  /** Data configuration options array */
2221
2235
  data?: Array<string | {
2222
2236
  label: default_2.ReactNode;
2223
2237
  value: string;
2224
2238
  disabled?: boolean;
2239
+ /** Optional leading icon rendered alongside the item's label */
2240
+ icon?: default_2.ReactNode;
2225
2241
  }>;
2226
2242
  /** Active selected item value key */
2227
2243
  value?: string;
2228
- /** Callback triggered when selected item changes */
2229
- onChange?: (value: string) => void;
2230
2244
  }
2231
2245
 
2232
2246
  /**
@@ -2257,10 +2271,16 @@ declare interface RecursicaSliderProps_2 {
2257
2271
  tooltipLabel?: default_2.ReactNode | ((value: number) => default_2.ReactNode);
2258
2272
  /** Icon shown to the left of the slider track */
2259
2273
  icon?: default_2.ReactNode;
2274
+ /** Icon shown to the right of the slider track */
2275
+ trailingIcon?: default_2.ReactNode;
2260
2276
  /** Render numeric input side-by-side or stacked */
2261
2277
  showInput?: boolean;
2262
2278
  /** Show min and max labels below track */
2263
2279
  showMinMaxLabels?: boolean;
2280
+ /** Override the label shown at the minimum end of the track. Defaults to the numeric `min`. */
2281
+ minLabel?: default_2.ReactNode;
2282
+ /** Override the label shown at the maximum end of the track. Defaults to the numeric `max`. */
2283
+ maxLabel?: default_2.ReactNode;
2264
2284
  }
2265
2285
 
2266
2286
  /**
@@ -2301,11 +2321,10 @@ export declare interface RecursicaSwitchGroupProps {
2301
2321
  value?: string[];
2302
2322
  /** Checked default values list in uncontrolled mode */
2303
2323
  defaultValue?: string[];
2304
- /** Callback triggered when any switch toggles state */
2305
- onChange?: (value: string[]) => void;
2306
2324
  }
2307
2325
 
2308
2326
  declare interface RecursicaSwitchGroupProps_2 extends Omit<FormGroupProps, "size" | "labelProps" | "onChange" | "classes" | "ref" | "value" | "defaultValue">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth" | "classes" | "onChange" | "defaultValue">, ReadOnlyControlProps, RecursicaSwitchGroupProps {
2327
+ onChange?: (value: string[]) => void;
2309
2328
  }
2310
2329
 
2311
2330
  /**
@@ -2404,9 +2423,13 @@ export declare interface RecursicaTextFieldProps extends Omit<InputBaseProps, "c
2404
2423
  * Props for the Recursica TextField component.
2405
2424
  */
2406
2425
  declare interface RecursicaTextFieldProps_2 {
2407
- /** Section rendered inside input on the left (e.g. icon) */
2426
+ /**
2427
+ * Section rendered inside input on the left (e.g. icon).
2428
+ * Not renamed to Forge's `leadingIcon`: deliberately reuses Mantine's own native name;
2429
+ * MUI's own (`startAdornment`) is more implementation-specific and isn't icon-only either.
2430
+ */
2408
2431
  leftSection?: default_2.ReactNode;
2409
- /** Section rendered inside input on the right (e.g. clear button) */
2432
+ /** Section rendered inside input on the right (e.g. clear button). Same naming rationale as `leftSection` above. */
2410
2433
  rightSection?: default_2.ReactNode;
2411
2434
  }
2412
2435
 
@@ -2647,12 +2670,12 @@ export declare const SegmentedControl: typeof rawComponents.SegmentedControl;
2647
2670
  /**
2648
2671
  * Recursica SegmentedControl component wrapping Mui's SegmentedControl.
2649
2672
  */
2650
- declare const SegmentedControl_2: ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<ToggleButtonGroupProps, "className" | "color" | "value" | "classNames" | "onChange" | "variant" | "disabled" | "size" | "radius"> & {
2673
+ declare const SegmentedControl_2: ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<ToggleButtonGroupProps, "className" | "color" | "value" | "classNames" | "variant" | "size" | "radius"> & {
2651
2674
  className?: string;
2652
2675
  classNames?: Partial<Record<string, string>>;
2653
2676
  } & RecursicaSegmentedControlProps>, BlockedStylingKeys> & ForbiddenStyles & {
2654
2677
  overStyled?: false | undefined;
2655
- }, "ref"> | Omit<Omit<Omit<ToggleButtonGroupProps, "className" | "color" | "value" | "classNames" | "onChange" | "variant" | "disabled" | "size" | "radius"> & {
2678
+ }, "ref"> | Omit<Omit<Omit<ToggleButtonGroupProps, "className" | "color" | "value" | "classNames" | "variant" | "size" | "radius"> & {
2656
2679
  className?: string;
2657
2680
  classNames?: Partial<Record<string, string>>;
2658
2681
  } & RecursicaSegmentedControlProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
@@ -2670,7 +2693,7 @@ columnGap?: string | number | RecursicaSpacing;
2670
2693
  overStyled: true;
2671
2694
  }, "ref">) & RefAttributes<HTMLDivElement>>;
2672
2695
 
2673
- declare type SegmentedControlProps = RecursicaOverStyled<Omit<ToggleButtonGroupProps, "variant" | "size" | "radius" | "color" | "classNames" | "className" | "disabled" | "value" | "onChange"> & {
2696
+ declare type SegmentedControlProps = RecursicaOverStyled<Omit<ToggleButtonGroupProps, "variant" | "size" | "radius" | "color" | "classNames" | "className" | "value"> & {
2674
2697
  className?: string;
2675
2698
  classNames?: Partial<Record<string, string>>;
2676
2699
  } & RecursicaSegmentedControlProps>;
@@ -2681,7 +2704,8 @@ export declare const Slider: typeof rawComponents.Slider;
2681
2704
  * Recursica Slider component wrapping Mui's Slider.
2682
2705
  *
2683
2706
  * Implements a bidirectional text input field next to the slider track, responsive layouts,
2684
- * custom typography-bound min/max labels, an optional leading icon, and an explicit read-only layout.
2707
+ * custom typography-bound min/max labels (optionally overridden via `minLabel`/`maxLabel`),
2708
+ * optional leading/trailing icons, and an explicit read-only layout.
2685
2709
  */
2686
2710
  declare const Slider_2: default_2.ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<RecursicaSliderProps>, BlockedStylingKeys> & ForbiddenStyles & {
2687
2711
  overStyled?: false | undefined;