@recursica/mantine-adapter 0.20.0 → 0.22.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 (81) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/mantine-adapter.cjs +1 -1
  3. package/dist/mantine-adapter.cjs.map +1 -1
  4. package/dist/mantine-adapter.css +1 -1
  5. package/dist/mantine-adapter.js +1624 -1498
  6. package/dist/mantine-adapter.js.map +1 -1
  7. package/dist/src/components/AutoComplete/AutoComplete.d.ts +9 -0
  8. package/dist/src/components/Avatar/Avatar.d.ts +1 -1
  9. package/dist/src/components/Badge/Badge.d.ts +1 -1
  10. package/dist/src/components/Button/Button.d.ts +11 -1
  11. package/dist/src/components/Card/Card.d.ts +1 -1
  12. package/dist/src/components/Flex/Flex.d.ts +1 -1
  13. package/dist/src/components/Link/Link.d.ts +1 -1
  14. package/dist/src/components/SegmentedControl/SegmentedControl.d.ts +6 -1
  15. package/dist/src/components/Text/Text.d.ts +1 -1
  16. package/dist/src/components/Toast/Toast.d.ts +1 -1
  17. package/dist/src/components/index.d.ts +1 -0
  18. package/package.json +5 -2
  19. package/src/GlobalExemptions.modules.css +13 -0
  20. package/src/components/AutoComplete/AUTOCOMPLETE_IMPLEMENTATION_NOTES.md +21 -0
  21. package/src/components/AutoComplete/AutoComplete.module.css +311 -0
  22. package/src/components/AutoComplete/AutoComplete.stories.tsx +187 -0
  23. package/src/components/AutoComplete/AutoComplete.tsx +154 -0
  24. package/src/components/Avatar/Avatar.module.css +40 -36
  25. package/src/components/Badge/Badge.module.css +4 -1
  26. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -10
  27. package/src/components/Button/Button.module.css +220 -57
  28. package/src/components/Button/Button.stories.tsx +68 -0
  29. package/src/components/Button/Button.tsx +42 -3
  30. package/src/components/Button/IMPLEMENTATION_NOTES.md +16 -0
  31. package/src/components/Card/Card.module.css +58 -1
  32. package/src/components/Card/Card.stories.tsx +4 -2
  33. package/src/components/Checkbox/Checkbox.module.css +74 -46
  34. package/src/components/Checkbox/Checkbox.stories.tsx +3 -0
  35. package/src/components/Checkbox/CheckboxGroup.tsx +1 -9
  36. package/src/components/Chip/Chip.module.css +19 -1
  37. package/src/components/DatePicker/DatePicker.module.css +45 -0
  38. package/src/components/Dropdown/Dropdown.module.css +42 -15
  39. package/src/components/Dropdown/Dropdown.stories.tsx +3 -0
  40. package/src/components/Dropdown/Dropdown.tsx +5 -1
  41. package/src/components/FileInput/FileInput.module.css +50 -0
  42. package/src/components/FileUpload/FileUpload.module.css +43 -0
  43. package/src/components/FormControlLayout/FormControlLayout.module.css +12 -2
  44. package/src/components/FormControlWrapper/FormControlWrapper.module.css +66 -0
  45. package/src/components/HoverCard/HoverCard.module.css +12 -5
  46. package/src/components/Label/Label.module.css +11 -3
  47. package/src/components/Link/Link.module.css +8 -0
  48. package/src/components/Menu/Menu.module.css +73 -30
  49. package/src/components/Modal/Modal.module.css +92 -47
  50. package/src/components/NumberInput/NumberInput.module.css +46 -15
  51. package/src/components/NumberInput/NumberInput.tsx +5 -1
  52. package/src/components/Pagination/Pagination.module.css +123 -41
  53. package/src/components/Panel/Panel.module.css +55 -3
  54. package/src/components/Popover/Popover.module.css +6 -4
  55. package/src/components/Radio/Radio.module.css +72 -59
  56. package/src/components/Radio/Radio.stories.tsx +3 -0
  57. package/src/components/Radio/RadioGroup.tsx +1 -8
  58. package/src/components/ReadOnlyField/ReadOnlyField.module.css +14 -0
  59. package/src/components/ReadOnlyField/ReadOnlyField.tsx +16 -1
  60. package/src/components/SegmentedControl/SegmentedControl.module.css +106 -41
  61. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +1 -4
  62. package/src/components/SegmentedControl/SegmentedControl.tsx +18 -4
  63. package/src/components/Slider/Slider.module.css +89 -0
  64. package/src/components/Stepper/Stepper.module.css +53 -2
  65. package/src/components/Switch/Switch.module.css +62 -23
  66. package/src/components/Switch/Switch.stories.tsx +3 -0
  67. package/src/components/Switch/Switch.tsx +1 -0
  68. package/src/components/Switch/SwitchGroup.tsx +3 -10
  69. package/src/components/Tabs/Tabs.module.css +33 -12
  70. package/src/components/TextArea/TextArea.module.css +58 -120
  71. package/src/components/TextArea/TextArea.stories.tsx +3 -0
  72. package/src/components/TextArea/TextArea.tsx +7 -3
  73. package/src/components/TextField/TextField.module.css +46 -15
  74. package/src/components/TextField/TextField.tsx +5 -1
  75. package/src/components/TimePicker/TimePicker.module.css +44 -0
  76. package/src/components/Timeline/Timeline.module.css +6 -0
  77. package/src/components/Toast/Toast.module.css +62 -1
  78. package/src/components/Toast/Toast.tsx +1 -1
  79. package/src/components/Tooltip/Tooltip.module.css +9 -0
  80. package/src/components/TransferList/TransferList.module.css +41 -0
  81. package/src/components/index.ts +1 -0
@@ -0,0 +1,9 @@
1
+ import { default as React } from 'react';
2
+ import { AutocompleteProps as MantineAutocompleteProps, InputWrapperProps } from '@mantine/core';
3
+ import { ReadOnlyControlProps } from '@recursica/adapter-common';
4
+ import { RecursicaOverStyled } from '../../utils/filterStylingProps';
5
+ import { RecursicaFormControlWrapperProps } from '../FormControlWrapper/FormControlWrapper';
6
+ export interface RecursicaAutoCompleteProps extends Omit<MantineAutocompleteProps, "size" | "variant" | "radius" | "wrapperProps">, Pick<InputWrapperProps, "label" | "error" | "required" | "withAsterisk" | "id">, Omit<RecursicaFormControlWrapperProps, "controlMaxWidth" | "controlMinWidth">, ReadOnlyControlProps {
7
+ }
8
+ export type AutoCompleteProps = RecursicaOverStyled<RecursicaAutoCompleteProps>;
9
+ export declare const AutoComplete: React.ForwardRefExoticComponent<AutoCompleteProps & React.RefAttributes<HTMLInputElement>>;
@@ -14,7 +14,7 @@ export type AvatarProps = RecursicaOverStyled<Omit<MantineAvatarProps, "variant"
14
14
  */
15
15
  export declare const Avatar: (<C = "div">(props: import('@mantine/core').PolymorphicComponentProps<C, AvatarProps>) => React.ReactElement) & Omit<React.FunctionComponent<((AvatarProps & {
16
16
  component?: any;
17
- }) & 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" | "top" | "left" | "bottom" | "right" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "name" | "icon" | "size" | "gradient" | "src" | "alt" | "imageProps" | "autoContrast" | "allowedInitialsColors" | "component"> & {
17
+ }) & 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" | "top" | "left" | "bottom" | "right" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "name" | "icon" | "size" | "component" | "alt" | "src" | "gradient" | "imageProps" | "autoContrast" | "allowedInitialsColors"> & {
18
18
  ref?: any;
19
19
  renderRoot?: (props: any) => any;
20
20
  }) | (AvatarProps & {
@@ -12,7 +12,7 @@ export type BadgeProps = RecursicaOverStyled<Omit<MantineBadgeProps, "variant" |
12
12
  */
13
13
  export declare const Badge: (<C = "div">(props: import('@mantine/core').PolymorphicComponentProps<C, BadgeProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<((BadgeProps & {
14
14
  component?: any;
15
- }) & 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" | "top" | "left" | "bottom" | "right" | "circle" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "gradient" | "autoContrast" | "component" | "leftSection" | "rightSection" | "fullWidth"> & {
15
+ }) & 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" | "top" | "left" | "bottom" | "right" | "circle" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "component" | "leftSection" | "rightSection" | "gradient" | "autoContrast" | "fullWidth"> & {
16
16
  ref?: any;
17
17
  renderRoot?: (props: any) => any;
18
18
  }) | (BadgeProps & {
@@ -1,10 +1,20 @@
1
1
  import { default as React } from 'react';
2
+ import { RecursicaLoaderProps } from '../Loader/Loader';
2
3
  import { ButtonProps as MantineButtonProps } from '@mantine/core';
3
4
  import { RecursicaOverStyled } from '../../utils/filterStylingProps';
4
5
  export interface RecursicaButtonProps {
6
+ /** The visual style variant of the button */
5
7
  variant?: "solid" | "outline" | "text";
8
+ /** The size of the button */
6
9
  size?: "default" | "small";
10
+ /** An optional icon element to display to the left of the button text. Replaces Mantine's leftSection. */
7
11
  icon?: React.ReactNode;
12
+ /** Which Recursica Loader variant to use */
13
+ loaderVariant?: RecursicaLoaderProps["variant"];
14
+ /** The size variant for the loader */
15
+ loaderSize?: RecursicaLoaderProps["size"];
16
+ /** Whether to use the Recursica loader or fallback to the Mantine loader */
17
+ useRecursicaLoader?: boolean;
8
18
  }
9
19
  export type ButtonProps = RecursicaOverStyled<Omit<MantineButtonProps, "variant" | "size" | "leftSection" | "fullWidth"> & RecursicaButtonProps>;
10
20
  /**
@@ -25,7 +35,7 @@ export type ButtonProps = RecursicaOverStyled<Omit<MantineButtonProps, "variant"
25
35
  */
26
36
  export declare const Button: (<C = "button">(props: import('@mantine/core').PolymorphicComponentProps<C, ButtonProps>) => React.ReactElement) & Omit<React.FunctionComponent<((ButtonProps & {
27
37
  component?: any;
28
- }) & 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" | "top" | "left" | "bottom" | "right" | "color" | "children" | "radius" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "disabled" | "icon" | "justify" | "size" | "gradient" | "autoContrast" | "component" | "loading" | "rightSection" | "data-disabled" | "loaderProps"> & {
38
+ }) & 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" | "top" | "left" | "bottom" | "right" | "color" | "children" | "radius" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "disabled" | "icon" | "justify" | "size" | "component" | "rightSection" | "data-disabled" | "gradient" | "autoContrast" | "loading" | "loaderProps" | "loaderVariant" | "loaderSize" | "useRecursicaLoader"> & {
29
39
  ref?: any;
30
40
  renderRoot?: (props: any) => any;
31
41
  }) | (ButtonProps & {
@@ -32,7 +32,7 @@ export declare const CardContent: import('react').ForwardRefExoticComponent<Card
32
32
  */
33
33
  declare const PolymorphicCard: (<C = "div">(props: import('@mantine/core').PolymorphicComponentProps<C, CardProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<((CardProps & {
34
34
  component?: any;
35
- }) & 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" | "shadow" | "w" | "miw" | "maw" | "h" | "mih" | "mah" | "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "top" | "left" | "bottom" | "right" | "children" | "radius" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "component" | "withBorder" | "padding"> & {
35
+ }) & 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" | "shadow" | "w" | "miw" | "maw" | "h" | "mih" | "mah" | "m" | "my" | "mx" | "mt" | "mb" | "ml" | "mr" | "top" | "left" | "bottom" | "right" | "children" | "radius" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "component" | "padding" | "withBorder"> & {
36
36
  ref?: any;
37
37
  renderRoot?: (props: any) => any;
38
38
  }) | (CardProps & {
@@ -29,7 +29,7 @@ export type FlexProps = MantineFlexProps & RecursicaFlexProps;
29
29
  */
30
30
  export declare const Flex: (<C = "div">(props: import('@mantine/core').PolymorphicComponentProps<C, FlexProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<(MantineFlexProps & RecursicaFlexProps & {
31
31
  component?: any;
32
- } & 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" | "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" | "variant" | "attributes" | "justify" | "component" | "direction" | "wrap" | "align"> & {
32
+ } & 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" | "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" | "variant" | "attributes" | "justify" | "component" | "wrap" | "align" | "direction"> & {
33
33
  ref?: any;
34
34
  renderRoot?: (props: any) => any;
35
35
  }) | (MantineFlexProps & RecursicaFlexProps & {
@@ -24,7 +24,7 @@ export type LinkProps = RecursicaOverStyled<Omit<MantineAnchorProps, "underline"
24
24
  */
25
25
  export declare const Link: (<C = "a">(props: import('@mantine/core').PolymorphicComponentProps<C, LinkProps>) => React.ReactElement) & Omit<React.FunctionComponent<((LinkProps & {
26
26
  component?: any;
27
- }) & 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" | "top" | "left" | "bottom" | "right" | "color" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "icon" | "inherit" | "inline" | "size" | "gradient" | "component" | "__staticSelector" | "lineClamp" | "truncate"> & {
27
+ }) & 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" | "top" | "left" | "bottom" | "right" | "color" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "icon" | "inherit" | "inline" | "size" | "__staticSelector" | "component" | "gradient" | "lineClamp" | "truncate"> & {
28
28
  ref?: any;
29
29
  renderRoot?: (props: any) => any;
30
30
  }) | (LinkProps & {
@@ -5,8 +5,13 @@ export interface RecursicaSegmentedControlProps {
5
5
  orientation?: "horizontal" | "vertical";
6
6
  /** If true, the control will take up the full width of its container */
7
7
  fullWidth?: boolean;
8
+ /**
9
+ * SegmentedControl should NOT be allowed to be disabled by design.
10
+ * This component explicitly disables the `disabled` prop.
11
+ */
12
+ disabled?: never;
8
13
  }
9
- export type SegmentedControlProps = RecursicaOverStyled<Omit<MantineSegmentedControlProps, "variant" | "size" | "radius" | "color" | "classNames" | "className"> & {
14
+ export type SegmentedControlProps = RecursicaOverStyled<Omit<MantineSegmentedControlProps, "variant" | "size" | "radius" | "color" | "classNames" | "className" | "disabled"> & {
10
15
  className?: string;
11
16
  classNames?: Partial<Record<string, string>>;
12
17
  } & RecursicaSegmentedControlProps>;
@@ -23,7 +23,7 @@ export type TextProps = RecursicaOverStyled<RecursicaTextProps>;
23
23
  */
24
24
  export declare const Text: (<C = "p">(props: import('@mantine/core').PolymorphicComponentProps<C, TextProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<((TextProps & {
25
25
  component?: any;
26
- }) & 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" | "top" | "left" | "bottom" | "right" | "span" | "color" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "inherit" | "inline" | "size" | "gradient" | "component" | "__staticSelector" | "lineClamp" | "truncate"> & {
26
+ }) & 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" | "top" | "left" | "bottom" | "right" | "span" | "color" | "children" | "__vars" | "__size" | "hiddenFrom" | "visibleFrom" | "lightHidden" | "darkHidden" | "mod" | "ms" | "me" | "ps" | "pe" | "bdrs" | "bgsz" | "bgp" | "bgr" | "bga" | "pos" | "inset" | "display" | "flex" | "unstyled" | "variant" | "attributes" | "overStyled" | "inherit" | "inline" | "size" | "__staticSelector" | "component" | "gradient" | "lineClamp" | "truncate"> & {
27
27
  ref?: any;
28
28
  renderRoot?: (props: any) => any;
29
29
  }) | (TextProps & {
@@ -6,7 +6,7 @@ export interface RecursicaToastProps {
6
6
  * The visual variant of the toast.
7
7
  * @default "default"
8
8
  */
9
- variant?: "default";
9
+ variant?: "default" | "error" | "success";
10
10
  /**
11
11
  * Loading state is natively unsupported by Recursica UI Kit.
12
12
  * If a loading state is required, pass a `<Loader size="sm" />` directly into the `icon` prop.
@@ -1,4 +1,5 @@
1
1
  export * from './Accordion';
2
+ export * from './AutoComplete/AutoComplete';
2
3
  export * from './Avatar';
3
4
  export * from './Badge/Badge';
4
5
  export * from './Breadcrumb/Breadcrumb';
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.20.0",
16
+ "version": "0.22.0",
17
17
  "type": "module",
18
18
  "main": "./dist/mantine-adapter.cjs",
19
19
  "module": "./dist/mantine-adapter.js",
@@ -47,7 +47,9 @@
47
47
  "build": "vite build --mode library",
48
48
  "build-storybook": "storybook build -o storybook-static",
49
49
  "lint": "eslint .",
50
- "storybook": "storybook dev -p 6006"
50
+ "storybook": "storybook dev -p 6006",
51
+ "analyze-tokens": "analyze-tokens --css recursica_variables_scoped.css --dir src/components --output token-analysis.json",
52
+ "prebuild": "npm run analyze-tokens"
51
53
  },
52
54
  "devDependencies": {
53
55
  "@chromatic-com/storybook": "^5.1.1",
@@ -55,6 +57,7 @@
55
57
  "@recursica/adapter-common": "*",
56
58
  "@recursica/recursica-postcss-vars": "*",
57
59
  "@recursica/storybook-template": "*",
60
+ "@recursica/token-analyzer": "*",
58
61
  "@repo/typescript-config": "*",
59
62
  "@storybook/addon-a11y": "^10.3.3",
60
63
  "@storybook/addon-docs": "^10.3.3",
@@ -0,0 +1,13 @@
1
+ /**
2
+ * GLOBAL EXEMPTIONS
3
+ *
4
+ * This file hosts global, brand, and layout variables that are defined in
5
+ * recursica_variables_scoped.css but are not used by any specific component.
6
+ * Isolating them here keeps individual component stylesheets clean and focused.
7
+ */
8
+
9
+ /* ==== GLOBAL ICON STYLE ====
10
+ Global layout option specifying the overall SVG rendering style (solid/outline).
11
+ Note to Forge Devs: style is not a CSS property or variable type and cannot be applied in standard CSS stylesheets.
12
+ This variable is ignored in the UI adapters and should be reviewed by the Forge team. */
13
+ /* recursica-ignore: --recursica_ui-kit_globals_icon_style */
@@ -0,0 +1,21 @@
1
+ # AutoComplete Implementation Notes
2
+
3
+ ## Form Control Wrapping
4
+
5
+ The `AutoComplete` component is wrapped using the `WithReadOnlyWrapper` to seamlessly bridge standard `InputWrapperProps` attributes (like `label`, `error`, `assistiveText`) directly onto the macro Recursica `<FormControlWrapper>`.
6
+
7
+ ## CSS Layout Execution
8
+
9
+ The baseline structure maps identical `HARDCODED VALUES` as standard text inputs (`border-width: 1px`, `display: flex`). The `.root` dynamically overrides the `--input-left-section-size` and `--input-right-section-size` to accurately allocate whitespace for prepended or appended icons natively matching the underlying UI token layout system securely.
10
+
11
+ ## Dropdown Styling
12
+
13
+ The Mantine `<Autocomplete>` dropdown menu and options are styled strictly using native UI-Kit variables mapping border radii, shadows, and base colors (`.dropdown` and `.option`).
14
+
15
+ ## State Cascade Architecture
16
+
17
+ Focus, errors, and disabled visual states are enforced explicitly via the outer `<FormControlWrapper>` boundary emitting context down structurally (`[data-error]`, `[data-disabled]`) and evaluated efficiently against scoped nested selectors natively inside `AutoComplete.module.css`.
18
+
19
+ ## Missing Active Option Color
20
+
21
+ Currently, there is no explicit JSON token for the background color of an active/hovered option in the AutoComplete dropdown. We temporarily map `.option:hover` and `.option[data-combobox-active]` to the `--recursica_ui-kit_components_autocomplete_variants_states_focus_properties_colors_background` variable. Because this variable maps to the base field background, the highlight is currently invisible. This will be updated once the correct token is added to the UI kit.
@@ -0,0 +1,311 @@
1
+ /* EXEMPTIONS:
2
+ - state-specific border-size variables are ignored because the input box uses a uniform static boundary to prevent
3
+ unexpected layout shifts or flickering when switching between active, focused, or error states. */
4
+ /* recursica-ignore: --recursica_ui-kit_components_autocomplete_variants_states_default_properties_border-size */
5
+ /* recursica-ignore: --recursica_ui-kit_components_autocomplete_variants_states_disabled_properties_border-size */
6
+ /* recursica-ignore: --recursica_ui-kit_components_autocomplete_variants_states_error_properties_border-size */
7
+ /* recursica-ignore: --recursica_ui-kit_components_autocomplete_variants_states_focus_properties_border-size */
8
+
9
+ /* LAYOUT SPACING OVERRIDES:
10
+ - Sets the --form-control-margin-bottom spacing hook to map component-specific layout tokens. */
11
+ .layoutOverride {
12
+ --form-control-margin-bottom: var(
13
+ --recursica_ui-kit_components_autocomplete_variants_layouts_stacked_properties_top-bottom-margin
14
+ );
15
+ }
16
+
17
+ .layoutOverride[data-form-layout="side-by-side"] {
18
+ --form-control-margin-bottom: var(
19
+ --recursica_ui-kit_components_autocomplete_variants_layouts_side-by-side_properties_top-bottom-margin
20
+ );
21
+ }
22
+
23
+ /* HARDCODED VALUES:
24
+ - border-width: 1px. Native geometric boundary for the input box.
25
+ - border-style: solid. Native structural rendering rule.
26
+ - outline: none. Bypassing browser focus rings to rely strictly on Recursica focus states natively.
27
+ - flex/layout: display: flex on the root wrapper safely encapsulating internal section rendering.
28
+ */
29
+
30
+ .root {
31
+ display: flex;
32
+ position: relative;
33
+ width: 100%;
34
+ min-height: var(
35
+ --recursica_ui-kit_components_autocomplete_properties_min-height
36
+ );
37
+
38
+ /* Override Mantine native Input variables governing section spacing padding mathematics safely */
39
+ --input-left-section-size: calc(
40
+ var(
41
+ --recursica_ui-kit_components_autocomplete_properties_horizontal-padding
42
+ ) +
43
+ var(--recursica_ui-kit_components_autocomplete_properties_icon-size) +
44
+ var(--recursica_ui-kit_components_autocomplete_properties_icon-text-gap)
45
+ );
46
+ --input-right-section-size: calc(
47
+ var(
48
+ --recursica_ui-kit_components_autocomplete_properties_horizontal-padding
49
+ ) +
50
+ var(--recursica_ui-kit_components_autocomplete_properties_icon-size) +
51
+ var(--recursica_ui-kit_components_autocomplete_properties_icon-text-gap)
52
+ );
53
+ }
54
+
55
+ .input {
56
+ /* Structural Overrides */
57
+ width: 100%;
58
+ box-sizing: border-box;
59
+ margin: 0;
60
+
61
+ /* Box Geometry */
62
+ min-height: var(
63
+ --recursica_ui-kit_components_autocomplete_properties_min-height
64
+ );
65
+ padding-top: var(
66
+ --recursica_ui-kit_components_autocomplete_properties_vertical-padding
67
+ );
68
+ padding-bottom: var(
69
+ --recursica_ui-kit_components_autocomplete_properties_vertical-padding
70
+ );
71
+ padding-left: var(
72
+ --recursica_ui-kit_components_autocomplete_properties_horizontal-padding
73
+ );
74
+ padding-right: var(
75
+ --recursica_ui-kit_components_autocomplete_properties_horizontal-padding
76
+ );
77
+ border-radius: var(
78
+ --recursica_ui-kit_components_autocomplete_properties_border-radius
79
+ );
80
+ border-width: 1px;
81
+ border-style: solid;
82
+
83
+ /* Strict Typography Unification */
84
+ font-family: var(
85
+ --recursica_ui-kit_components_autocomplete_properties_text_font-family
86
+ );
87
+ font-size: var(
88
+ --recursica_ui-kit_components_autocomplete_properties_text_font-size
89
+ );
90
+ font-style: var(
91
+ --recursica_ui-kit_components_autocomplete_properties_text_font-style
92
+ );
93
+ font-weight: var(
94
+ --recursica_ui-kit_components_autocomplete_properties_text_font-weight
95
+ );
96
+ letter-spacing: var(
97
+ --recursica_ui-kit_components_autocomplete_properties_text_letter-spacing
98
+ );
99
+ line-height: var(
100
+ --recursica_ui-kit_components_autocomplete_properties_text_line-height
101
+ );
102
+ text-decoration: var(
103
+ --recursica_ui-kit_components_autocomplete_properties_text_text-decoration
104
+ );
105
+ text-transform: var(
106
+ --recursica_ui-kit_components_autocomplete_properties_text_text-transform
107
+ );
108
+
109
+ /* Base State Default Execution */
110
+ background-color: var(
111
+ --recursica_ui-kit_components_autocomplete_variants_states_default_properties_colors_background
112
+ );
113
+ border-color: var(
114
+ --recursica_ui-kit_components_autocomplete_variants_states_default_properties_colors_border-color
115
+ );
116
+ color: var(
117
+ --recursica_ui-kit_components_autocomplete_variants_states_default_properties_colors_text
118
+ );
119
+
120
+ outline: none;
121
+ }
122
+
123
+ .input::placeholder {
124
+ opacity: var(
125
+ --recursica_ui-kit_components_autocomplete_properties_placeholder-opacity
126
+ );
127
+ color: inherit;
128
+ }
129
+
130
+ /* Dynamic Padding Overrides */
131
+ .root[data-with-left-section] .input {
132
+ padding-left: var(--input-left-section-size);
133
+ }
134
+
135
+ .root[data-with-right-section] .input {
136
+ padding-right: var(--input-right-section-size);
137
+ }
138
+
139
+ /* Flexible End-Caps (Icons, actions) */
140
+ .section {
141
+ display: flex;
142
+ align-items: center;
143
+ height: 100%;
144
+ }
145
+
146
+ .section[data-position="left"] {
147
+ justify-content: flex-start;
148
+ padding-left: var(
149
+ --recursica_ui-kit_components_autocomplete_properties_horizontal-padding
150
+ );
151
+ }
152
+
153
+ .section[data-position="right"] {
154
+ justify-content: flex-end;
155
+ padding-right: var(
156
+ --recursica_ui-kit_components_autocomplete_properties_horizontal-padding
157
+ );
158
+ }
159
+
160
+ .section :global(svg) {
161
+ width: var(--recursica_ui-kit_components_autocomplete_properties_icon-size);
162
+ height: var(--recursica_ui-kit_components_autocomplete_properties_icon-size);
163
+ color: var(
164
+ --recursica_ui-kit_components_autocomplete_variants_states_default_properties_colors_leading-icon
165
+ );
166
+ }
167
+
168
+ .section[data-position="right"] :global(svg) {
169
+ color: var(
170
+ --recursica_ui-kit_components_autocomplete_variants_states_default_properties_colors_trailing-icon
171
+ );
172
+ }
173
+
174
+ /* Dropdown and Options */
175
+ /* We want to make sure the dropdown inherits font correctly. */
176
+ .dropdown {
177
+ background-color: var(
178
+ --recursica_ui-kit_components_autocomplete_variants_states_default_properties_colors_background
179
+ );
180
+ border: 1px solid
181
+ var(
182
+ --recursica_ui-kit_components_autocomplete_variants_states_default_properties_colors_border-color
183
+ );
184
+ border-radius: var(
185
+ --recursica_ui-kit_components_autocomplete_properties_border-radius
186
+ );
187
+ box-shadow: var(--recursica_ui-kit_components_menu_properties_elevation);
188
+ }
189
+
190
+ .option {
191
+ font-family: var(
192
+ --recursica_ui-kit_components_autocomplete_properties_text_font-family
193
+ );
194
+ font-size: var(
195
+ --recursica_ui-kit_components_autocomplete_properties_text_font-size
196
+ );
197
+ font-weight: var(
198
+ --recursica_ui-kit_components_autocomplete_properties_text_font-weight
199
+ );
200
+ color: var(
201
+ --recursica_ui-kit_components_autocomplete_variants_states_default_properties_colors_text
202
+ );
203
+ padding: calc(
204
+ var(
205
+ --recursica_ui-kit_components_autocomplete_properties_vertical-padding
206
+ ) *
207
+ 0.75
208
+ )
209
+ var(
210
+ --recursica_ui-kit_components_autocomplete_properties_horizontal-padding
211
+ );
212
+ cursor: pointer;
213
+ }
214
+
215
+ .option[data-selected="true"],
216
+ .option[data-selected],
217
+ .option[data-combobox-selected="true"],
218
+ .option[data-combobox-selected],
219
+ .option[data-combobox-active="true"],
220
+ .option[data-combobox-active],
221
+ .option[data-hovered="true"],
222
+ .option[data-hovered],
223
+ .option:hover {
224
+ background-color: var(
225
+ --recursica_ui-kit_components_autocomplete_variants_states_focus_properties_colors_background
226
+ );
227
+ color: var(
228
+ --recursica_ui-kit_components_autocomplete_variants_states_focus_properties_colors_text
229
+ );
230
+ }
231
+
232
+ /* -------------------------------------
233
+ STATE CASCADE ARCHITECTURE
234
+ -------------------------------------- */
235
+
236
+ /* Focus State Mapping (Triggered internally via browser pseudo-pseudo-class) */
237
+ .input:focus-within,
238
+ .input:focus {
239
+ border-color: var(
240
+ --recursica_ui-kit_components_autocomplete_variants_states_focus_properties_colors_border-color
241
+ );
242
+ background-color: var(
243
+ --recursica_ui-kit_components_autocomplete_variants_states_focus_properties_colors_background
244
+ );
245
+ color: var(
246
+ --recursica_ui-kit_components_autocomplete_variants_states_focus_properties_colors_text
247
+ );
248
+ }
249
+
250
+ .root:focus-within .section[data-position="left"] :global(svg) {
251
+ color: var(
252
+ --recursica_ui-kit_components_autocomplete_variants_states_focus_properties_colors_leading-icon
253
+ );
254
+ }
255
+
256
+ .root:focus-within .section[data-position="right"] :global(svg) {
257
+ color: var(
258
+ --recursica_ui-kit_components_autocomplete_variants_states_focus_properties_colors_trailing-icon
259
+ );
260
+ }
261
+
262
+ /* Error State Mapping (Propagated strictly down from the wrapper DOM context) */
263
+ .root[data-error] .input {
264
+ border-color: var(
265
+ --recursica_ui-kit_components_autocomplete_variants_states_error_properties_colors_border-color
266
+ );
267
+ background-color: var(
268
+ --recursica_ui-kit_components_autocomplete_variants_states_error_properties_colors_background
269
+ );
270
+ color: var(
271
+ --recursica_ui-kit_components_autocomplete_variants_states_error_properties_colors_text
272
+ );
273
+ }
274
+
275
+ .root[data-error] .section[data-position="left"] :global(svg) {
276
+ color: var(
277
+ --recursica_ui-kit_components_autocomplete_variants_states_error_properties_colors_leading-icon
278
+ );
279
+ }
280
+
281
+ .root[data-error] .section[data-position="right"] :global(svg) {
282
+ color: var(
283
+ --recursica_ui-kit_components_autocomplete_variants_states_error_properties_colors_trailing-icon
284
+ );
285
+ }
286
+
287
+ /* Disabled State Mapping (Propagated strictly down from the wrapper DOM context) */
288
+ .root[data-disabled] .input {
289
+ border-color: var(
290
+ --recursica_ui-kit_components_autocomplete_variants_states_disabled_properties_colors_border-color
291
+ );
292
+ background-color: var(
293
+ --recursica_ui-kit_components_autocomplete_variants_states_disabled_properties_colors_background
294
+ );
295
+ color: var(
296
+ --recursica_ui-kit_components_autocomplete_variants_states_disabled_properties_colors_text
297
+ );
298
+ cursor: not-allowed;
299
+ }
300
+
301
+ .root[data-disabled] .section[data-position="left"] :global(svg) {
302
+ color: var(
303
+ --recursica_ui-kit_components_autocomplete_variants_states_disabled_properties_colors_leading-icon
304
+ );
305
+ }
306
+
307
+ .root[data-disabled] .section[data-position="right"] :global(svg) {
308
+ color: var(
309
+ --recursica_ui-kit_components_autocomplete_variants_states_disabled_properties_colors_trailing-icon
310
+ );
311
+ }