@recursica/mantine-adapter 0.26.1 → 0.28.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 (70) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/mantine-adapter.cjs +11 -1
  3. package/dist/mantine-adapter.cjs.map +1 -1
  4. package/dist/mantine-adapter.css +1 -1
  5. package/dist/mantine-adapter.js +2203 -1995
  6. package/dist/mantine-adapter.js.map +1 -1
  7. package/dist/src/components/Accordion/Accordion.d.ts +3 -4
  8. package/dist/src/components/AutoComplete/AutoComplete.d.ts +4 -6
  9. package/dist/src/components/Avatar/Avatar.d.ts +2 -3
  10. package/dist/src/components/Badge/Badge.d.ts +1 -1
  11. package/dist/src/components/Button/Button.d.ts +1 -1
  12. package/dist/src/components/Card/Card.d.ts +10 -2
  13. package/dist/src/components/Checkbox/CheckboxGroup.d.ts +2 -6
  14. package/dist/src/components/Container/Container.d.ts +14 -2
  15. package/dist/src/components/DatePicker/DatePicker.d.ts +1 -5
  16. package/dist/src/components/Dropdown/Dropdown.d.ts +1 -1
  17. package/dist/src/components/Flex/Flex.d.ts +26 -3
  18. package/dist/src/components/FormControlWrapper/FormControlWrapper.d.ts +1 -0
  19. package/dist/src/components/Group/Group.d.ts +14 -2
  20. package/dist/src/components/Link/Link.d.ts +3 -4
  21. package/dist/src/components/Menu/Menu.d.ts +2 -2
  22. package/dist/src/components/Panel/Panel.d.ts +6 -4
  23. package/dist/src/components/Radio/RadioGroup.d.ts +2 -6
  24. package/dist/src/components/Slider/Slider.d.ts +1 -5
  25. package/dist/src/components/Stack/Stack.d.ts +27 -4
  26. package/dist/src/components/Stepper/Stepper.d.ts +4 -2
  27. package/dist/src/components/Switch/SwitchGroup.d.ts +2 -6
  28. package/dist/src/components/Table/Table.d.ts +16 -3
  29. package/dist/src/components/Tabs/Tabs.d.ts +4 -2
  30. package/dist/src/components/Text/Text.d.ts +3 -2
  31. package/dist/src/components/TextArea/TextArea.d.ts +1 -1
  32. package/dist/src/components/TextField/TextField.d.ts +1 -5
  33. package/dist/src/components/Title/Title.d.ts +2 -1
  34. package/dist/src/components/index.d.ts +1 -0
  35. package/dist/src/index.d.ts +153 -1
  36. package/dist/src/utils/filterStylingProps.d.ts +1 -1
  37. package/package.json +1 -1
  38. package/src/OverStyling.tsx +67 -3
  39. package/src/components/Accordion/Accordion.tsx +1 -1
  40. package/src/components/AutoComplete/AutoComplete.tsx +13 -4
  41. package/src/components/Avatar/Avatar.tsx +1 -1
  42. package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +7 -0
  43. package/src/components/Card/Card.module.css +1 -0
  44. package/src/components/Card/Card.tsx +27 -1
  45. package/src/components/Checkbox/CheckboxGroup.tsx +6 -3
  46. package/src/components/Container/Container.tsx +4 -2
  47. package/src/components/DatePicker/DatePicker.tsx +1 -3
  48. package/src/components/Dropdown/Dropdown.tsx +4 -11
  49. package/src/components/Flex/Flex.tsx +7 -2
  50. package/src/components/FormControlWrapper/FormControlWrapper.tsx +1 -0
  51. package/src/components/Group/Group.tsx +7 -2
  52. package/src/components/Link/Link.tsx +3 -3
  53. package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +3 -3
  54. package/src/components/Panel/Panel.stories.tsx +8 -8
  55. package/src/components/Panel/Panel.tsx +11 -4
  56. package/src/components/Radio/RadioGroup.tsx +6 -3
  57. package/src/components/ReadOnlyField/ReadOnlyField.tsx +5 -1
  58. package/src/components/Stack/Stack.tsx +7 -2
  59. package/src/components/Stepper/Stepper.tsx +5 -1
  60. package/src/components/Switch/SwitchGroup.tsx +6 -3
  61. package/src/components/Table/Table.module.css +7 -0
  62. package/src/components/Table/Table.stories.tsx +33 -3
  63. package/src/components/Table/Table.tsx +56 -5
  64. package/src/components/Tabs/Tabs.tsx +5 -1
  65. package/src/components/Text/Text.tsx +3 -1
  66. package/src/components/TextArea/TextArea.tsx +2 -9
  67. package/src/components/Title/Title.tsx +3 -1
  68. package/src/components/index.ts +1 -0
  69. package/src/index.ts +168 -1
  70. package/src/utils/filterStylingProps.ts +1 -0
@@ -1,6 +1,7 @@
1
+ import { TextProps as MantineTextProps } from '@mantine/core';
1
2
  import { RecursicaOverStyled } from '../../utils/filterStylingProps';
2
3
  import { RecursicaTextProps } from '@recursica/adapter-common';
3
- export type TextProps = RecursicaOverStyled<RecursicaTextProps>;
4
+ export type TextProps = RecursicaOverStyled<Omit<MantineTextProps, "variant"> & RecursicaTextProps>;
4
5
  /**
5
6
  * A generalized typographical wrapper limiting text properties to bounded Recursica UI-kit tokens inherently.
6
7
  * Do not use for semantic headings; use the explicit `<Title>` component for `<h1>` - `<h6>`.
@@ -14,7 +15,7 @@ export type TextProps = RecursicaOverStyled<RecursicaTextProps>;
14
15
  */
15
16
  export declare const Text: (<C = "p">(props: import('@mantine/core').PolymorphicComponentProps<C, TextProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<((TextProps & {
16
17
  component?: any;
17
- }) & Omit<Omit<any, "ref">, "variant" | "children" | "overStyled" | "component"> & {
18
+ }) & Omit<Omit<any, "ref">, "className" | "classNames" | "style" | "styles" | "vars" | "p" | "px" | "py" | "pt" | "pb" | "pl" | "pr" | "bg" | "c" | "opacity" | "ff" | "fz" | "fw" | "lts" | "ta" | "lh" | "fs" | "tt" | "td" | "bd" | "w" | "miw" | "maw" | "h" | "mih" | "mah" | "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap" | "top" | "left" | "bottom" | "right" | "variant" | "span" | "color" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "attributes" | "overStyled" | "inherit" | "inline" | "size" | "__staticSelector" | "component" | "gradient" | "lineClamp" | "truncate"> & {
18
19
  ref?: any;
19
20
  renderRoot?: (props: any) => any;
20
21
  }) | (TextProps & {
@@ -3,7 +3,7 @@ import { TextareaProps as MantineTextareaProps } from '@mantine/core';
3
3
  import { ReadOnlyControlProps, RecursicaTextAreaProps as BaseRecursicaTextAreaProps } from '@recursica/adapter-common';
4
4
  import { RecursicaOverStyled } from '../../utils/filterStylingProps';
5
5
  import { RecursicaFormControlWrapperProps } from '../FormControlWrapper/FormControlWrapper';
6
- export interface RecursicaTextAreaProps extends Omit<MantineTextareaProps, "size" | "variant" | "radius" | "wrapperProps">, Pick<RecursicaFormControlWrapperProps, "assistiveText" | "assistiveWithIcon" | "formLayout" | "labelSize" | "labelAlignment" | "labelOptionalText" | "labelWithEditIcon" | "onLabelEditClick">, ReadOnlyControlProps, BaseRecursicaTextAreaProps {
6
+ export interface RecursicaTextAreaProps extends Omit<MantineTextareaProps, "size" | "variant" | "radius" | "wrapperProps">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth">, ReadOnlyControlProps, BaseRecursicaTextAreaProps {
7
7
  }
8
8
  export type TextAreaProps = RecursicaOverStyled<RecursicaTextAreaProps>;
9
9
  export declare const TextArea: React.ForwardRefExoticComponent<TextAreaProps & React.RefAttributes<HTMLTextAreaElement>>;
@@ -6,8 +6,4 @@ import { RecursicaFormControlWrapperProps } from '../FormControlWrapper/FormCont
6
6
  export interface RecursicaTextFieldProps extends Omit<InputProps, "size" | "variant" | "radius" | "wrapperProps">, Pick<InputWrapperProps, "label" | "error" | "required" | "withAsterisk" | "id">, Omit<React.ComponentPropsWithoutRef<"input">, "size" | "style" | "className" | "id">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth">, ReadOnlyControlProps, BaseRecursicaTextFieldProps {
7
7
  }
8
8
  export type TextFieldProps = RecursicaOverStyled<RecursicaTextFieldProps>;
9
- export declare const TextField: React.ForwardRefExoticComponent<(Omit<Omit<RecursicaTextFieldProps, import('@recursica/adapter-common').BlockedStylingKeys> & import('@recursica/adapter-common').ForbiddenStyles & {
10
- overStyled?: false | undefined;
11
- }, "ref"> | Omit<RecursicaTextFieldProps & {
12
- overStyled: true;
13
- }, "ref">) & React.RefAttributes<HTMLInputElement>>;
9
+ export declare const TextField: React.ForwardRefExoticComponent<TextFieldProps & React.RefAttributes<HTMLInputElement>>;
@@ -1,6 +1,7 @@
1
+ import { TitleProps as MantineTitleProps } from '@mantine/core';
1
2
  import { RecursicaOverStyled } from '../../utils/filterStylingProps';
2
3
  import { RecursicaTitleProps } from '@recursica/adapter-common';
3
- export type TitleProps = RecursicaOverStyled<RecursicaTitleProps>;
4
+ export type TitleProps = RecursicaOverStyled<Omit<MantineTitleProps, "size"> & RecursicaTitleProps>;
4
5
  /**
5
6
  * Enforces highly accessible structural markup utilizing semantic `<h1>` through `<h6>` tags securely bound directly to Recursica typographic scales.
6
7
  */
@@ -42,6 +42,7 @@ export * from './TextArea/TextArea';
42
42
  export * from './TextField/TextField';
43
43
  export * from './TimePicker/TimePicker';
44
44
  export * from './Timeline/Timeline';
45
+ export * from './Timeline/TimelineItem';
45
46
  export * from './Title/Title';
46
47
  export * from './Toast';
47
48
  export * from './Tooltip/Tooltip';
@@ -1,2 +1,154 @@
1
- export * from './components';
1
+ import * as rawComponents from "./components";
2
2
  export * from '@recursica/adapter-common';
3
+ export declare const Flex: (<C = "div">(props: import('@mantine/core').PolymorphicComponentProps<C, rawComponents.FlexProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<(Omit<import('@mantine/core').FlexProps & import('@recursica/adapter-common').RecursicaFlexProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
4
+ m?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
5
+ mx?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
6
+ my?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
7
+ mt?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
8
+ mb?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
9
+ ml?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
10
+ mr?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
11
+ gap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
12
+ rowGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
13
+ columnGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
14
+ } & {
15
+ component?: any;
16
+ } & Omit<Omit<any, "ref">, "className" | "classNames" | "style" | "styles" | "vars" | "p" | "px" | "py" | "pt" | "pb" | "pl" | "pr" | "bg" | "c" | "opacity" | "ff" | "fz" | "fw" | "lts" | "ta" | "lh" | "fs" | "tt" | "td" | "bd" | "w" | "miw" | "maw" | "h" | "mih" | "mah" | "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap" | "top" | "left" | "bottom" | "right" | "key" | "defaultValue" | "onChange" | "variant" | "slot" | "title" | "defaultChecked" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "hidden" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "content" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "attributes" | "justify" | "component" | "wrap" | "align" | "direction"> & {
17
+ ref?: any;
18
+ renderRoot?: (props: any) => any;
19
+ }) | (Omit<import('@mantine/core').FlexProps & import('@recursica/adapter-common').RecursicaFlexProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
20
+ m?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
21
+ mx?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
22
+ my?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
23
+ mt?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
24
+ mb?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
25
+ ml?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
26
+ mr?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
27
+ gap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
28
+ rowGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
29
+ columnGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
30
+ } & {
31
+ component: React.ElementType;
32
+ renderRoot?: (props: Record<string, any>) => any;
33
+ })>, never> & Record<string, never>;
34
+ export declare const Group: import('react').ForwardRefExoticComponent<Omit<import('@mantine/core').GroupProps & import('@recursica/adapter-common').RecursicaGroupProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
35
+ m?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
36
+ mx?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
37
+ my?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
38
+ mt?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
39
+ mb?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
40
+ ml?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
41
+ mr?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
42
+ gap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
43
+ rowGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
44
+ columnGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
45
+ } & import('react').RefAttributes<HTMLDivElement>>;
46
+ export declare const Stack: (<C = "div">(props: import('@mantine/core').PolymorphicComponentProps<C, rawComponents.StackProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<(Omit<import('@mantine/core').StackProps & import('@recursica/adapter-common').RecursicaStackProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
47
+ m?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
48
+ mx?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
49
+ my?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
50
+ mt?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
51
+ mb?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
52
+ ml?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
53
+ mr?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
54
+ gap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
55
+ rowGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
56
+ columnGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
57
+ } & {
58
+ component?: any;
59
+ } & Omit<Omit<any, "ref">, "className" | "classNames" | "style" | "styles" | "vars" | "p" | "px" | "py" | "pt" | "pb" | "pl" | "pr" | "bg" | "c" | "opacity" | "ff" | "fz" | "fw" | "lts" | "ta" | "lh" | "fs" | "tt" | "td" | "bd" | "w" | "miw" | "maw" | "h" | "mih" | "mah" | "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap" | "top" | "left" | "bottom" | "right" | "key" | "defaultValue" | "onChange" | "variant" | "slot" | "title" | "defaultChecked" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "hidden" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "content" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "attributes" | "justify" | "component" | "align"> & {
60
+ ref?: any;
61
+ renderRoot?: (props: any) => any;
62
+ }) | (Omit<import('@mantine/core').StackProps & import('@recursica/adapter-common').RecursicaStackProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
63
+ m?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
64
+ mx?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
65
+ my?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
66
+ mt?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
67
+ mb?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
68
+ ml?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
69
+ mr?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
70
+ gap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
71
+ rowGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
72
+ columnGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
73
+ } & {
74
+ component: React.ElementType;
75
+ renderRoot?: (props: Record<string, any>) => any;
76
+ })>, never> & Record<string, never>;
77
+ export declare const Container: import('react').ForwardRefExoticComponent<Omit<Omit<import('@mantine/core').ContainerProps, "size"> & import('@recursica/adapter-common').RecursicaContainerProps, "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap"> & {
78
+ m?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
79
+ mx?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
80
+ my?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
81
+ mt?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
82
+ mb?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
83
+ ml?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
84
+ mr?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
85
+ gap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
86
+ rowGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
87
+ columnGap?: string | number | import('@recursica/adapter-common').RecursicaSpacing;
88
+ } & import('react').RefAttributes<HTMLDivElement>>;
89
+ export declare const Link: (<C = "a">(props: import('@mantine/core').PolymorphicComponentProps<C, rawComponents.LinkProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<((rawComponents.LinkProps & {
90
+ component?: any;
91
+ }) & Omit<Omit<any, "ref">, "className" | "classNames" | "style" | "styles" | "vars" | "p" | "px" | "py" | "pt" | "pb" | "pl" | "pr" | "bg" | "c" | "opacity" | "ff" | "fz" | "fw" | "lts" | "ta" | "lh" | "fs" | "tt" | "td" | "bd" | "w" | "miw" | "maw" | "h" | "mih" | "mah" | "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap" | "top" | "left" | "bottom" | "right" | "variant" | "color" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "attributes" | "overStyled" | "icon" | "inherit" | "inline" | "size" | "__staticSelector" | "component" | "gradient" | "lineClamp" | "truncate"> & {
92
+ ref?: any;
93
+ renderRoot?: (props: any) => any;
94
+ }) | (rawComponents.LinkProps & {
95
+ component: React.ElementType;
96
+ renderRoot?: (props: Record<string, any>) => any;
97
+ })>, never> & Record<string, never>;
98
+ export declare const Text: (<C = "p">(props: import('@mantine/core').PolymorphicComponentProps<C, rawComponents.TextProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<((rawComponents.TextProps & {
99
+ component?: any;
100
+ }) & Omit<Omit<any, "ref">, "className" | "classNames" | "style" | "styles" | "vars" | "p" | "px" | "py" | "pt" | "pb" | "pl" | "pr" | "bg" | "c" | "opacity" | "ff" | "fz" | "fw" | "lts" | "ta" | "lh" | "fs" | "tt" | "td" | "bd" | "w" | "miw" | "maw" | "h" | "mih" | "mah" | "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "gap" | "rowGap" | "columnGap" | "top" | "left" | "bottom" | "right" | "variant" | "span" | "color" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "attributes" | "overStyled" | "inherit" | "inline" | "size" | "__staticSelector" | "component" | "gradient" | "lineClamp" | "truncate"> & {
101
+ ref?: any;
102
+ renderRoot?: (props: any) => any;
103
+ }) | (rawComponents.TextProps & {
104
+ component: React.ElementType;
105
+ renderRoot?: (props: Record<string, any>) => any;
106
+ })>, never> & Record<string, never>;
107
+ export declare const Accordion: typeof rawComponents.Accordion;
108
+ export declare const AccordionItem: typeof rawComponents.AccordionItem;
109
+ export declare const AccordionControl: typeof rawComponents.AccordionControl;
110
+ export declare const AccordionPanel: typeof rawComponents.AccordionPanel;
111
+ export declare const AutoComplete: typeof rawComponents.AutoComplete;
112
+ export declare const Avatar: typeof rawComponents.Avatar;
113
+ export declare const Badge: typeof rawComponents.Badge;
114
+ export declare const Breadcrumb: typeof rawComponents.Breadcrumb;
115
+ export declare const Button: typeof rawComponents.Button;
116
+ export declare const Card: typeof rawComponents.Card;
117
+ export declare const Checkbox: typeof rawComponents.Checkbox;
118
+ export declare const CheckboxGroup: typeof rawComponents.CheckboxGroup;
119
+ export declare const Chip: typeof rawComponents.Chip;
120
+ export declare const DatePicker: typeof rawComponents.DatePicker;
121
+ export declare const Dropdown: typeof rawComponents.Dropdown;
122
+ export declare const FileInput: typeof rawComponents.FileInput;
123
+ export declare const FileUpload: typeof rawComponents.FileUpload;
124
+ export declare const FormControlLayout: typeof rawComponents.FormControlLayout;
125
+ export declare const HoverCard: typeof rawComponents.HoverCard;
126
+ export declare const Loader: typeof rawComponents.Loader;
127
+ export declare const Label: typeof rawComponents.Label;
128
+ export declare const Menu: typeof rawComponents.Menu;
129
+ export declare const Modal: typeof rawComponents.Modal;
130
+ export declare const NumberInput: typeof rawComponents.NumberInput;
131
+ export declare const Pagination: typeof rawComponents.Pagination;
132
+ export declare const Panel: typeof rawComponents.Panel;
133
+ export declare const PanelFooter: typeof rawComponents.PanelFooter;
134
+ export declare const Popover: typeof rawComponents.Popover;
135
+ export declare const Radio: typeof rawComponents.Radio;
136
+ export declare const RadioGroup: typeof rawComponents.RadioGroup;
137
+ export declare const ReadOnlyField: typeof rawComponents.ReadOnlyField;
138
+ export declare const SegmentedControl: typeof rawComponents.SegmentedControl;
139
+ export declare const Slider: typeof rawComponents.Slider;
140
+ export declare const Stepper: typeof rawComponents.Stepper;
141
+ export declare const Switch: typeof rawComponents.Switch;
142
+ export declare const SwitchGroup: typeof rawComponents.SwitchGroup;
143
+ export declare const Table: typeof rawComponents.Table;
144
+ export declare const Tabs: typeof rawComponents.Tabs;
145
+ export declare const TextArea: typeof rawComponents.TextArea;
146
+ export declare const TextField: typeof rawComponents.TextField;
147
+ export declare const TimePicker: typeof rawComponents.TimePicker;
148
+ export declare const Timeline: typeof rawComponents.Timeline;
149
+ export declare const TimelineItem: typeof rawComponents.TimelineItem;
150
+ export declare const Title: typeof rawComponents.Title;
151
+ export declare const Toast: typeof rawComponents.Toast;
152
+ export declare const Tooltip: typeof rawComponents.Tooltip;
153
+ export declare const TransferList: typeof rawComponents.TransferList;
154
+ export type { RecursicaCheckboxGroupProps, RecursicaDatePickerProps, RecursicaDropdownProps, RecursicaNumberInputProps, RecursicaRadioGroupProps, RecursicaReadOnlyFieldProps, RecursicaReadOnlyTextFieldProps, RecursicaSliderProps, RecursicaSwitchGroupProps, RecursicaTextAreaProps, RecursicaTextFieldProps, } from './components';
@@ -22,7 +22,7 @@
22
22
  * @returns Sanitized component props safe for internal styling merging
23
23
  */
24
24
  export declare const BLOCKED_STYLING_KEYS: readonly ["className", "classNames", "style", "styles", "vars", "p", "px", "py", "pt", "pb", "pl", "pr", "bg", "c", "opacity", "ff", "fz", "fw", "lts", "ta", "lh", "fs", "tt", "td", "bd", "bdw", "bds", "bdc", "bdr", "shadow", "w", "miw", "maw", "h", "mih", "mah"];
25
- export { type RecursicaSpacing, type RecursicaSize, type RecursicaOverStyled, type BlockedStylingKeys, type ForbiddenStyles, } from '@recursica/adapter-common';
25
+ export { type RecursicaSpacing, type RecursicaSize, type RecursicaOverStyled, type BlockedStylingKeys, type ForbiddenStyles, type WithRecursicaSpacing, } from '@recursica/adapter-common';
26
26
  export declare const SPACING_MAP: Record<string, string>;
27
27
  export declare function mapLayoutProps<T extends Record<string, unknown>>(props: T): T;
28
28
  export declare function filterStylingProps<T extends Record<string, unknown>>(props: T, overStyled?: boolean): Partial<T>;
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "url": "git+https://github.com/borderux/recursica.git",
14
14
  "directory": "packages/mantine-adapter"
15
15
  },
16
- "version": "0.26.1",
16
+ "version": "0.28.0",
17
17
  "type": "module",
18
18
  "main": "./dist/mantine-adapter.cjs",
19
19
  "module": "./dist/mantine-adapter.js",
@@ -1,7 +1,25 @@
1
- import { Container, Card, Title, Text, Group, Stack } from "./components";
2
- import { Button } from "./components/Button/Button";
1
+ import {
2
+ Container,
3
+ Card,
4
+ Title,
5
+ Text as RawText,
6
+ Group,
7
+ Stack,
8
+ Switch as RawSwitch,
9
+ } from "./components";
10
+ import { Button as RawButton } from "./components/Button/Button";
11
+ import {
12
+ useGlobalOverStyled,
13
+ toggleGlobalOverStyled,
14
+ wrapComponent,
15
+ } from "@recursica/adapter-common";
16
+
17
+ const Button = wrapComponent(RawButton);
18
+ const Text = wrapComponent(RawText);
19
+ const Switch = wrapComponent(RawSwitch);
3
20
 
4
21
  export const OverStylingInfo = () => {
22
+ const isHighlightActive = useGlobalOverStyled();
5
23
  return (
6
24
  <Container size="md" style={{ padding: "32px 0" }}>
7
25
  <Card>
@@ -197,6 +215,52 @@ export const OverStylingInfo = () => {
197
215
  mb="rec-xl"
198
216
  />
199
217
 
218
+ <Title order={3} mb="rec-sm">
219
+ Visual Auditing & Highlights (Development Only)
220
+ </Title>
221
+ <Text mb="rec-sm">
222
+ To make it easy to spot technical debt and design system violations,
223
+ Recursica automatically tracks any component that uses the{" "}
224
+ <code>overStyled={`{true}`}</code> prop.
225
+ </Text>
226
+ <Text mb="rec-sm">
227
+ In <strong>development builds</strong>, you can highlight all
228
+ over-styled components on the page. Open your browser's developer
229
+ console and run:
230
+ </Text>
231
+ <Stack
232
+ style={{
233
+ padding: 12,
234
+ backgroundColor: "#f5f5f5",
235
+ borderRadius: 6,
236
+ fontSize: 13,
237
+ marginTop: 8,
238
+ marginBottom: 16,
239
+ }}
240
+ >
241
+ <code>recursica.toggleOverStyled()</code>
242
+ </Stack>
243
+ <Group mb="rec-md">
244
+ <Switch
245
+ label="Highlight Over-Styled Components"
246
+ checked={isHighlightActive}
247
+ onChange={() => toggleGlobalOverStyled()}
248
+ />
249
+ </Group>
250
+ <Text mb="rec-xl">
251
+ This toggles a <strong>cyan 2px box shadow</strong> outline around
252
+ the children of all over-styled components. The wrapping elements
253
+ use <code>display: contents</code> under the hood to ensure they
254
+ occupy zero DOM space and do not affect flex, grid, or absolute
255
+ positioning flow. In production builds, this debugging helper is
256
+ completely disabled and stripped with zero performance overhead.
257
+ </Text>
258
+
259
+ <Stack
260
+ style={{ height: 1, backgroundColor: "#eaeaea" }}
261
+ mb="rec-xl"
262
+ />
263
+
200
264
  <Title order={3} mb="rec-md">
201
265
  Live Example
202
266
  </Title>
@@ -217,7 +281,7 @@ export const OverStylingInfo = () => {
217
281
  </Stack>
218
282
  <Stack gap="rec-sm">
219
283
  <Text overStyled size="sm" c="dimmed">
220
- overStyled={`{true}`}
284
+ overStyled
221
285
  </Text>
222
286
  <Button overStyled={true} bg="pink" c="black" radius="xl">
223
287
  Unsafe Pink Marketing Button
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from "react";
1
+ import { forwardRef } from "react";
2
2
  import {
3
3
  Accordion as MantineAccordion,
4
4
  type AccordionProps as MantineAccordionProps,
@@ -18,7 +18,13 @@ import { type RecursicaAutocompleteProps as BaseRecursicaAutocompleteProps } fro
18
18
  export interface RecursicaAutoCompleteProps
19
19
  extends Omit<
20
20
  MantineAutocompleteProps,
21
- "size" | "variant" | "radius" | "wrapperProps"
21
+ | "size"
22
+ | "variant"
23
+ | "radius"
24
+ | "wrapperProps"
25
+ | "data"
26
+ | "defaultValue"
27
+ | "value"
22
28
  >,
23
29
  Pick<
24
30
  InputWrapperProps,
@@ -29,7 +35,10 @@ export interface RecursicaAutoCompleteProps
29
35
  "controlMaxWidth" | "controlMinWidth"
30
36
  >,
31
37
  ReadOnlyControlProps,
32
- BaseRecursicaAutocompleteProps {}
38
+ BaseRecursicaAutocompleteProps {
39
+ /** Current input value */
40
+ value?: string;
41
+ }
33
42
 
34
43
  export type AutoCompleteProps = RecursicaOverStyled<RecursicaAutoCompleteProps>;
35
44
 
@@ -140,8 +149,8 @@ export const AutoComplete = forwardRef<HTMLInputElement, AutoCompleteProps>(
140
149
  ref={ref}
141
150
  classNames={mergedClassNames}
142
151
  disabled={disabled}
143
- value={value}
144
- defaultValue={defaultValue}
152
+ value={value as string | undefined}
153
+ defaultValue={defaultValue as string | undefined}
145
154
  wrapperProps={{
146
155
  "data-disabled": disabled ? "true" : undefined,
147
156
  "data-error": error ? "true" : undefined,
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from "react";
1
+ import { forwardRef } from "react";
2
2
  import {
3
3
  Avatar as MantineAvatar,
4
4
  type AvatarProps as MantineAvatarProps,
@@ -8,3 +8,10 @@ Because Mantine natively constructs `Card` bounding boxes with generic inner `<C
8
8
  - `<Card.Footer>` explicitly hooks `--recursica_ui-kit_components_card_properties_footer-background` and corresponding padding variables.
9
9
 
10
10
  Mantine's generic `<Card.Section>` calculates negative margins implicitly. Because of this, it is crucial that our local CSS module declares `--card-padding: var(--recursica_ui-kit_components_card_properties_padding)` directly on `.root` so that all generic or explicit section wrappers natively stretch across the bounding box properly.
11
+
12
+ ## Layout Alignment Exceptions
13
+
14
+ To allow Cards to fit cleanly inside dynamic/flex layouts (like dashboard panels, grid tracks, or sidebar layout segments), the Card wrapper implements a custom gatekeeper bypass for outer styling properties:
15
+
16
+ - Exposes a safe subset of flexbox/dimensions styling properties (`flex`, `flexGrow`, `flexShrink`, `flexBasis`, `grow`, `h`, `height`) on the root `<Card>` component to allow proper sizing alongside layout siblings.
17
+ - Sets `<Card.Content>` to `flex-grow: 1;` by default via CSS modules. Since the root `<Card>` has `display: flex; flex-direction: column;`, this makes the content area expand to fill all vertical space, pushing `<Card.Footer>` to align at the absolute bottom of the bounding box.
@@ -89,6 +89,7 @@
89
89
  flex-direction: column;
90
90
  gap: var(--recursica_ui-kit_components_card_properties_vertical-gutter);
91
91
  padding: 0;
92
+ flex-grow: 1;
92
93
 
93
94
  /* Direct Figma Typography Mapping */
94
95
  font-family: var(
@@ -19,7 +19,15 @@ import {
19
19
  // ==== CARD CONTAINER ====
20
20
  export type CardProps = RecursicaOverStyled<
21
21
  MantineCardProps & RecursicaCardProps
22
- >;
22
+ > & {
23
+ flex?: string | number;
24
+ flexGrow?: string | number;
25
+ flexShrink?: string | number;
26
+ flexBasis?: string | number;
27
+ grow?: string | number;
28
+ h?: string | number;
29
+ height?: string | number;
30
+ };
23
31
 
24
32
  /**
25
33
  * The root Card elevation box. It establishes the global background color, border radius, nested component gap, and outer shadow governed by the current `Layer` context.
@@ -30,6 +38,24 @@ const CardBase = forwardRef<HTMLDivElement, CardProps>(function Card(
30
38
  ) {
31
39
  const sanitizedProps = filterStylingProps(rest, overStyled);
32
40
 
41
+ // Expose outer layout/flexbox properties on Card to allow structuring alongside siblings
42
+ const safeCardLayoutKeys = [
43
+ "flex",
44
+ "flexGrow",
45
+ "flexShrink",
46
+ "flexBasis",
47
+ "grow",
48
+ "h",
49
+ "height",
50
+ ] as const;
51
+ safeCardLayoutKeys.forEach((key) => {
52
+ if (key in rest && !(key in sanitizedProps)) {
53
+ (sanitizedProps as Record<string, unknown>)[key] = (
54
+ rest as Record<string, unknown>
55
+ )[key];
56
+ }
57
+ });
58
+
33
59
  const mergedClassNames: Partial<Record<string, string>> = {
34
60
  root: styles.root,
35
61
  };
@@ -16,7 +16,10 @@ import styles from "./Checkbox.module.css";
16
16
  import { type RecursicaCheckboxGroupProps as BaseRecursicaCheckboxGroupProps } from "@recursica/adapter-common";
17
17
 
18
18
  export interface RecursicaCheckboxGroupProps
19
- extends Omit<MantineCheckboxGroupProps, "size" | "labelProps">,
19
+ extends Omit<
20
+ MantineCheckboxGroupProps,
21
+ "size" | "labelProps" | "defaultValue" | "value" | "onChange"
22
+ >,
20
23
  Omit<
21
24
  RecursicaFormControlWrapperProps,
22
25
  "controlMaxWidth" | "controlMinWidth"
@@ -99,8 +102,8 @@ export const CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(
99
102
  /* Natively bind local disabled lock dynamically */
100
103
  {...(sanitizedProps as unknown as MantineCheckboxGroupProps)}
101
104
  disabled={readOnly || (restRecord as any).disabled}
102
- value={value}
103
- defaultValue={defaultValue}
105
+ value={value as any}
106
+ defaultValue={defaultValue as any}
104
107
  >
105
108
  <div className={styles.groupRoot} data-layout={formLayout}>
106
109
  {children}
@@ -5,6 +5,7 @@ import {
5
5
  } from "@mantine/core";
6
6
  import styles from "./Container.module.css";
7
7
 
8
+ import { type WithRecursicaSpacing } from "../../utils/filterStylingProps";
8
9
  import { type RecursicaContainerProps } from "@recursica/adapter-common";
9
10
 
10
11
  /**
@@ -14,8 +15,9 @@ import { type RecursicaContainerProps } from "@recursica/adapter-common";
14
15
  * DO NOT use the `RecursicaOverStyled` gatekeeper. Developers must be able to freely pass
15
16
  * width, height, padding, margins, and flexbox alignment props to construct structural layouts.
16
17
  */
17
- export type ContainerProps = Omit<MantineContainerProps, "size"> &
18
- RecursicaContainerProps;
18
+ export type ContainerProps = WithRecursicaSpacing<
19
+ Omit<MantineContainerProps, "size"> & RecursicaContainerProps
20
+ >;
19
21
 
20
22
  export const Container = forwardRef<HTMLDivElement, ContainerProps>(
21
23
  function Container({ children, size, ...rest }, ref) {
@@ -38,7 +38,7 @@ export interface RecursicaDatePickerProps
38
38
 
39
39
  export type DatePickerProps = RecursicaOverStyled<RecursicaDatePickerProps>;
40
40
 
41
- export const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(
41
+ export const DatePicker = forwardRef<HTMLButtonElement, DatePickerProps>(
42
42
  function DatePicker(props, ref) {
43
43
  const {
44
44
  overStyled = false,
@@ -148,9 +148,7 @@ export const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(
148
148
  ref={ref}
149
149
  classNames={mergedClassNames}
150
150
  disabled={disabled}
151
- // @ts-expect-error Mantine 8 DatePickerInput types are overly complex for unified wrappers
152
151
  value={value}
153
- // @ts-expect-error Mantine 8 DatePickerInput types are overly complex for unified wrappers
154
152
  defaultValue={defaultValue}
155
153
  label={undefined} // Disable Mantine's native label
156
154
  description={undefined} // Disable Mantine's native description
@@ -17,18 +17,11 @@ import { type RecursicaDropdownProps as BaseRecursicaDropdownProps } from "@recu
17
17
  export interface RecursicaDropdownProps
18
18
  extends Omit<
19
19
  MantineSelectProps,
20
- "size" | "variant" | "radius" | "wrapperProps"
20
+ "size" | "variant" | "radius" | "wrapperProps" | "data"
21
21
  >,
22
- Pick<
22
+ Omit<
23
23
  RecursicaFormControlWrapperProps,
24
- | "assistiveText"
25
- | "assistiveWithIcon"
26
- | "formLayout"
27
- | "labelSize"
28
- | "labelAlignment"
29
- | "labelOptionalText"
30
- | "labelWithEditIcon"
31
- | "onLabelEditClick"
24
+ "controlMaxWidth" | "controlMinWidth"
32
25
  >,
33
26
  ReadOnlyControlProps,
34
27
  BaseRecursicaDropdownProps {}
@@ -157,7 +150,7 @@ export const Dropdown = forwardRef<HTMLInputElement, DropdownProps>(
157
150
  disabled={disabled}
158
151
  value={value}
159
152
  defaultValue={defaultValue}
160
- data={data || []}
153
+ data={(data as unknown as MantineSelectProps["data"]) || []}
161
154
  label={undefined}
162
155
  description={undefined}
163
156
  error={undefined}
@@ -4,7 +4,10 @@ import {
4
4
  type FlexProps as MantineFlexProps,
5
5
  createPolymorphicComponent,
6
6
  } from "@mantine/core";
7
- import { mapLayoutProps } from "../../utils/filterStylingProps";
7
+ import {
8
+ mapLayoutProps,
9
+ type WithRecursicaSpacing,
10
+ } from "../../utils/filterStylingProps";
8
11
  import styles from "./Flex.module.css";
9
12
 
10
13
  import { type RecursicaFlexProps } from "@recursica/adapter-common";
@@ -16,7 +19,9 @@ import { type RecursicaFlexProps } from "@recursica/adapter-common";
16
19
  * DO NOT use the `RecursicaOverStyled` gatekeeper. Developers must be able to freely pass
17
20
  * width, height, padding, margins, and flexbox alignment props to construct structural layouts.
18
21
  */
19
- export type FlexProps = MantineFlexProps & RecursicaFlexProps;
22
+ export type FlexProps = WithRecursicaSpacing<
23
+ MantineFlexProps & RecursicaFlexProps
24
+ >;
20
25
 
21
26
  const _Flex = forwardRef<HTMLDivElement, FlexProps>(function Flex(
22
27
  { children, gap = "rec-default", rowGap, columnGap, ...rest },
@@ -10,6 +10,7 @@ import { AssistiveElement } from "../AssistiveElement/AssistiveElement";
10
10
  import styles from "./FormControlWrapper.module.css";
11
11
 
12
12
  import { type RecursicaFormControlWrapperProps } from "@recursica/adapter-common";
13
+ export type { RecursicaFormControlWrapperProps };
13
14
 
14
15
  export type FormControlWrapperProps = RecursicaOverStyled<
15
16
  Omit<InputWrapperProps, "labelProps" | "inputWrapperOrder"> &