@recursica/mui-adapter 0.39.0 → 0.39.2

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 (68) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/index.d.ts +42 -11
  3. package/dist/mui-adapter.cjs +64 -64
  4. package/dist/mui-adapter.cjs.map +1 -1
  5. package/dist/mui-adapter.css +1 -1
  6. package/dist/mui-adapter.js +6702 -6501
  7. package/dist/mui-adapter.js.map +1 -1
  8. package/package.json +2 -2
  9. package/src/components/Accordion/ACCORDION_IMPLEMENTATION_NOTES.md +44 -0
  10. package/src/components/Accordion/Accordion.module.css +15 -1
  11. package/src/components/Accordion/Accordion.stories.tsx +0 -21
  12. package/src/components/AssistiveElement/AssistiveElement.stories.tsx +3 -9
  13. package/src/components/AutoComplete/AutoComplete.module.css +15 -0
  14. package/src/components/AutoComplete/AutoComplete.tsx +8 -0
  15. package/src/components/AutoComplete/IMPLEMENTATION_NOTES.md +15 -0
  16. package/src/components/Avatar/Avatar.stories.tsx +0 -15
  17. package/src/components/Breadcrumb/BREADCRUMB_IMPLEMENTATION_NOTES.md +51 -0
  18. package/src/components/Breadcrumb/Breadcrumb.module.css +20 -0
  19. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +55 -5
  20. package/src/components/Breadcrumb/Breadcrumb.tsx +17 -3
  21. package/src/components/Button/BUTTON_IMPLEMENTATION_NOTES.md +35 -1
  22. package/src/components/Button/Button.module.css +19 -0
  23. package/src/components/Button/Button.tsx +13 -6
  24. package/src/components/Dropdown/DROPDOWN_IMPLEMENTATION_NOTES.md +25 -0
  25. package/src/components/Dropdown/Dropdown.module.css +19 -0
  26. package/src/components/Dropdown/Dropdown.stories.tsx +2 -8
  27. package/src/components/Dropdown/Dropdown.tsx +6 -3
  28. package/src/components/FormControlLayout/FormControlLayout.stories.tsx +1 -1
  29. package/src/components/Grid/IMPLEMENTATION_NOTES.md +8 -0
  30. package/src/components/Group/Group.tsx +42 -13
  31. package/src/components/Label/LABEL_IMPLEMENTATION_NOTES.md +27 -0
  32. package/src/components/Label/Label.module.css +5 -0
  33. package/src/components/Label/Label.stories.tsx +1 -1
  34. package/src/components/Label/Label.tsx +11 -1
  35. package/src/components/Link/LINK_IMPLEMENTATION_NOTES.md +9 -0
  36. package/src/components/Link/Link.module.css +20 -0
  37. package/src/components/Modal/MODAL_IMPLEMENTATION_NOTES.md +19 -0
  38. package/src/components/Modal/Modal.module.css +24 -4
  39. package/src/components/NumberInput/NUMBER_INPUT_IMPLEMENTATION_NOTES.md +93 -0
  40. package/src/components/NumberInput/NumberInput.module.css +101 -82
  41. package/src/components/NumberInput/NumberInput.tsx +126 -33
  42. package/src/components/Pagination/IMPLEMENTATION_NOTES.md +37 -0
  43. package/src/components/Pagination/Pagination.module.css +9 -0
  44. package/src/components/Pagination/Pagination.tsx +53 -3
  45. package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +59 -0
  46. package/src/components/Panel/Panel.module.css +30 -8
  47. package/src/components/Panel/Panel.tsx +71 -15
  48. package/src/components/Stepper/IMPLEMENTATION_NOTES.md +62 -0
  49. package/src/components/Stepper/Stepper.module.css +31 -0
  50. package/src/components/Stepper/Stepper.stories.tsx +1 -5
  51. package/src/components/Switch/SWITCH_IMPLEMENTATION_NOTES.md +24 -0
  52. package/src/components/Switch/Switch.stories.tsx +1 -1
  53. package/src/components/Switch/Switch.tsx +1 -1
  54. package/src/components/Tabs/IMPLEMENTATION_NOTES.md +50 -0
  55. package/src/components/Tabs/Tabs.module.css +90 -23
  56. package/src/components/Text/TEXT_IMPLEMENTATION_NOTES.md +10 -0
  57. package/src/components/Text/Text.stories.tsx +1 -1
  58. package/src/components/TextArea/TEXTAREA_IMPLEMENTATION_NOTES.md +42 -0
  59. package/src/components/TextArea/TextArea.module.css +11 -0
  60. package/src/components/TimePicker/TIMEPICKER_IMPLEMENTATION_NOTES.md +14 -0
  61. package/src/components/TimePicker/TimePicker.module.css +10 -0
  62. package/src/components/Timeline/IMPLEMENTATION_NOTES.md +16 -0
  63. package/src/components/Timeline/Timeline.module.css +13 -0
  64. package/src/components/Toast/TOAST_IMPLEMENTATION_NOTES.md +37 -0
  65. package/src/components/Toast/Toast.module.css +17 -0
  66. package/src/components/Toast/Toast.tsx +4 -1
  67. package/src/components/Tree/IMPLEMENTATION_NOTES.md +2 -0
  68. package/src/components/Tree/Tree.module.css +8 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @recursica/mui-adapter
2
2
 
3
+ ## 0.39.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 46b123a: Breadcrumb now marks its last child `aria-current="page"` and, if it looks interactive (has `href`/`onClick`), strips both and drops it from the tab order — best-effort, not a guarantee for custom Link components with their own internal navigation. Backed by a CSS reset (no color/underline/pointer-events) and the current item now picks up Link's font-family. New shared `markCurrentPageItem` util in adapter-common. mui-adapter's story also gets parity with mantine-adapter's: the last crumb renders as plain text, not a `Link`.
8
+ - 39de7b2: mui-adapter: Dropdown now renders its `placeholder` prop and gains a matching `.placeholder` style; Autocomplete's open menu now has the same input-to-menu gap as mantine; TimePicker's leading icon is no longer offset too far right.
9
+ mantine-adapter: DatePicker's read-only value is now formatted via `valueFormat` instead of a raw `Date.toString()`; TimePicker's leading icon no longer overlaps the field text.
10
+ - 46b123a: Link now replaces the browser's native focus outline with the recursica focus ring (`--recursica_brand_states_focus_*`), matching Button/every other interactive component instead of falling back to the browser default. Fixes the same incorrect ring on Breadcrumb, since its items are typically Links.
11
+ - 39de7b2: Fix Accordion chevron not rotating on expand, Modal centering instead of anchoring near top, and Toast showing a default icon it shouldn't. Add missing Accordion LayerOne story and exclude the intentional Grid span/size naming divergence from story parity. Fix NumberInput's default MUI focus ring/non-numeric input/icon spacing-color/height/border-radius, and TextArea's oversized autosize height.
12
+ - 39de7b2: mui-adapter: Stepper's connector gap, description content, and button spacing now match mantine; Stepper vertical spacing now matches mantine; Timeline's connector now reaches the next bullet; Tree's chevron-to-label gap now uses the right token; Pagination is now fully wired up (circle size/colors/outline, chevron colors/hover, ripple removed, ellipsis centering, text labels).
13
+ mantine-adapter: Stepper's completed/current label and description colors now apply (were silently falling back to Mantine's own default gray/black).
14
+ - 39de7b2: mui-adapter: Switch's read-only label and static-variations spacing now match mantine; Label's right-alignment and optional-text parentheses now work; Button's loading state shows only a centered loader (no label); Text's static-variations spacing matches mantine; Tabs' `inverted` variant now actually renders the tab list below the content.
15
+ mantine-adapter: Button's loader color now matches its label text color; Tabs' `inverted` variant now actually renders the tab list below the content; Grid gains a `ResponsiveSizes` story mirroring mui-adapter's.
16
+ - Updated dependencies [46b123a]
17
+ - @recursica/adapter-common@0.28.2
18
+
19
+ ## 0.39.1
20
+
21
+ ### Patch Changes
22
+
23
+ - a104e8a: Removed `searchable` from `Dropdown`'s shared contract — not a supported feature (that's `AutoComplete`'s job). mantine-adapter now strips it at runtime like its other unsupported native props; mui-adapter never wired it up.
24
+ - a104e8a: Fixed `Panel`'s `wrapHeaderText` default (was `false`, contract documents `true`) in both adapters.
25
+ - Updated dependencies [a104e8a]
26
+ - Updated dependencies [a104e8a]
27
+ - @recursica/adapter-common@0.28.1
28
+
3
29
  ## 0.39.0
4
30
 
5
31
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -41,6 +41,7 @@ import { MenuProps as MenuProps_2 } from '@mui/material';
41
41
  import { PaginationProps as PaginationProps_2 } from '@mui/material';
42
42
  import { RadioGroupProps as RadioGroupProps_2 } from '@mui/material';
43
43
  import { RadioProps } from '@mui/material';
44
+ import { ReactNode } from 'react';
44
45
  import { RefAttributes } from 'react';
45
46
  import { SelectProps } from '@mui/material';
46
47
  import { SliderProps } from '@mui/material';
@@ -275,6 +276,14 @@ export declare type BlockedStylingKeys = "className" | "classNames" | "classes"
275
276
 
276
277
  export declare const Breadcrumb: typeof rawComponents.Breadcrumb;
277
278
 
279
+ /**
280
+ * The last child should always be plain, non-interactive text (e.g. a `<span>`) — it represents
281
+ * the current page and shouldn't be a link. Breadcrumb tries to correct for a Link/anchor passed
282
+ * there anyway via `markCurrentPageItem` (aria-current, stripped href/onClick, CSS reset in
283
+ * Breadcrumb.module.css), but that's a best-effort safety net, not a guarantee — it can't stop a
284
+ * custom Link component (e.g. a router Link) that navigates from its own internal handler. See
285
+ * BREADCRUMB_IMPLEMENTATION_NOTES.md.
286
+ */
278
287
  declare const Breadcrumb_2: ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<Omit<BreadcrumbsProps, "variant" | "size"> & RecursicaBreadcrumbProps>, BlockedStylingKeys> & ForbiddenStyles & {
279
288
  overStyled?: false | undefined;
280
289
  }, "ref"> | Omit<Omit<Omit<BreadcrumbsProps, "variant" | "size"> & RecursicaBreadcrumbProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap" | "gutter" | "spacing"> & {
@@ -794,6 +803,18 @@ declare const Loader_2: default_2.ForwardRefExoticComponent<LoaderProps & defaul
794
803
 
795
804
  declare type LoaderProps = RecursicaOverStyled<default_2.HTMLAttributes<HTMLSpanElement> & RecursicaLoaderProps>;
796
805
 
806
+ /**
807
+ * Marks the last Breadcrumb child as the current page: adds `aria-current="page"`, and — if the
808
+ * element looks interactive (has `href` or `onClick`) — strips those props and sets `tabIndex={-1}`
809
+ * so it drops out of the tab order.
810
+ *
811
+ * This is best-effort, not a guarantee. `cloneElement` can only override props the element
812
+ * actually reads. A custom Link component (e.g. React Router's) that drives navigation from its
813
+ * own internal handler rather than a passed-through `onClick` will keep navigating regardless.
814
+ * The last crumb should really just be plain text — see BREADCRUMB_IMPLEMENTATION_NOTES.md.
815
+ */
816
+ export declare function markCurrentPageItem(children: ReactNode): ReactNode;
817
+
797
818
  export declare const Menu: typeof rawComponents.Menu;
798
819
 
799
820
  declare const Menu_2: ForwardRefExoticComponent<(Omit<Omit<WithRecursicaSpacing<MenuProps_2 & RecursicaMenuProps>, BlockedStylingKeys> & ForbiddenStyles & {
@@ -1108,7 +1129,7 @@ declare const Panel_2: PanelComponent;
1108
1129
  * - `Panel.Stack` — Stacked drawer context
1109
1130
  */
1110
1131
  declare const PanelBase: {
1111
- ({ overStyled, placement, keepMounted, wrapHeaderText, opened, ...rest }: PanelProps): JSX.Element;
1132
+ ({ overStyled, placement, keepMounted, wrapHeaderText, opened, title, withOverlay, withCloseButton, onClose, children, ...rest }: PanelProps): JSX.Element;
1112
1133
  displayName: string;
1113
1134
  };
1114
1135
 
@@ -1525,8 +1546,11 @@ export declare interface RecursicaAccordionItemProps {
1525
1546
  leftIcon?: default_2.ReactNode;
1526
1547
  /** Toggle visibility of the divider below the item */
1527
1548
  divider?: boolean;
1528
- /** Unique value identifier for this item */
1529
- value?: string;
1549
+ /** Unique value identifier for this item. Required — omitting it on multiple items collapses
1550
+ * them to the same identity and they toggle together (see beam-adapter's
1551
+ * docs/OPEN_DECISIONS.md #23b). Was optional in the type until 2026-08-29 even though every
1552
+ * real consumer already supplied it. */
1553
+ value: string;
1530
1554
  /** Disables interaction with this item — it can't be expanded or collapsed, and is dimmed */
1531
1555
  disabled?: boolean;
1532
1556
  }
@@ -1801,8 +1825,6 @@ declare interface RecursicaDropdownProps_2 {
1801
1825
  * selected display text — stays a real string (a whole subtree can't be matched/written),
1802
1826
  * unlike the `ReactNode` this was previously typed as. Falls back to `value` when omitted. */
1803
1827
  data?: RecursicaComboboxData;
1804
- /** Enable autocomplete search functionality */
1805
- searchable?: boolean;
1806
1828
  /** Show input clear option button */
1807
1829
  clearable?: boolean;
1808
1830
  /** Marks field with visual asterisk */
@@ -2009,8 +2031,9 @@ declare interface RecursicaFileUploadProps_2 extends Omit<default_2.HTMLAttribut
2009
2031
  export declare interface RecursicaFormControlLayoutProps {
2010
2032
  /** Layout structure direction */
2011
2033
  formLayout?: "stacked" | "side-by-side";
2012
- /** Label sizing constraint */
2013
- labelSize?: "small" | "default" | "md";
2034
+ /** Label sizing constraint. Only `small`/`default` are defined by Recursica's Label tokens —
2035
+ * `md` was never a real design size and has been removed. */
2036
+ labelSize?: "small" | "default";
2014
2037
  /** Optional left section element (usually Label) */
2015
2038
  leftSection?: default_2.ReactNode;
2016
2039
  /** Main wrapper bounding maximum width */
@@ -2089,8 +2112,10 @@ export declare interface RecursicaHoverCardProps {
2089
2112
  * Base properties for Recursica label indicators.
2090
2113
  */
2091
2114
  export declare interface RecursicaLabelProps {
2092
- /** Specifies the sizing metrics natively mapping the Label boundaries. */
2093
- labelSize?: "default" | "small" | "md";
2115
+ /** Specifies the sizing metrics natively mapping the Label boundaries. Only `default`/`small`
2116
+ * are defined by Recursica's Label tokens — `md` was never a real design size (no adapter had
2117
+ * a width rule for it) and has been removed; see docs/OPEN_DECISIONS.md #41 in beam-adapter. */
2118
+ labelSize?: "default" | "small";
2094
2119
  /**
2095
2120
  * Overall alignment directive for the label strings natively forcing Left/Right justification.
2096
2121
  * Not renamed to Forge's `labelAlign`: our own vocabulary, not either kit's native term.
@@ -2183,7 +2208,7 @@ export declare interface RecursicaModalProps {
2183
2208
  title?: default_2.ReactNode;
2184
2209
  }
2185
2210
 
2186
- export declare interface RecursicaNumberInputProps extends Omit<TextFieldProps, "size" | "variant" | "radius" | "wrapperProps" | "classNames" | "styles">, Pick<RecursicaFormControlWrapperProps, "assistiveText" | "assistiveWithIcon" | "formLayout" | "labelSize" | "labelAlignment" | "labelOptionalText" | "labelWithEditIcon" | "onLabelEditClick">, ReadOnlyControlProps, RecursicaNumberInputProps_2 {
2211
+ export declare interface RecursicaNumberInputProps extends Omit<InputBaseProps, "color" | "size" | "startAdornment" | "endAdornment" | "autoComplete" | "error">, Pick<RecursicaFormControlWrapperProps, "label" | "error" | "required" | "id" | "assistiveText" | "assistiveWithIcon" | "formLayout" | "labelSize" | "labelAlignment" | "labelOptionalText" | "labelWithEditIcon" | "onLabelEditClick">, ReadOnlyControlProps, RecursicaNumberInputProps_2 {
2187
2212
  }
2188
2213
 
2189
2214
  /**
@@ -2246,7 +2271,13 @@ export declare interface RecursicaPanelProps {
2246
2271
  /**
2247
2272
  * Recursica Panel root props. Extends Mui Drawer.
2248
2273
  */
2249
- declare interface RecursicaPanelProps_2 extends Omit<DrawerProps, "classes" | "position" | "style" | "anchor" | "open">, RecursicaPanelProps {
2274
+ declare interface RecursicaPanelProps_2 extends Omit<DrawerProps, "classes" | "position" | "style" | "anchor" | "open" | "title">, RecursicaPanelProps {
2275
+ /** Panel header title label. */
2276
+ title?: ReactNode;
2277
+ /** Whether to display a background overlay. Default true. */
2278
+ withOverlay?: boolean;
2279
+ /** Whether to display the close button in the header. Default true. */
2280
+ withCloseButton?: boolean;
2250
2281
  }
2251
2282
 
2252
2283
  /**