@recursica/mantine-adapter 0.11.0 → 0.12.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.
- package/CHANGELOG.md +10 -0
- package/README.md +6 -28
- package/dist/mantine-adapter.cjs +1 -1
- package/dist/mantine-adapter.cjs.map +1 -1
- package/dist/mantine-adapter.css +1 -1
- package/dist/mantine-adapter.js +1031 -891
- package/dist/mantine-adapter.js.map +1 -1
- package/dist/src/components/Menu/Menu.d.ts +85 -3
- package/package.json +1 -1
- package/src/components/Menu/MENU_IMPLEMENTATION_NOTES.md +78 -0
- package/src/components/Menu/Menu.module.css +244 -0
- package/src/components/Menu/Menu.stories.tsx +309 -5
- package/src/components/Menu/Menu.tsx +317 -4
|
@@ -1,3 +1,85 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { MenuProps as MantineMenuProps, MenuTargetProps as MantineMenuTargetProps, MenuDropdownProps as MantineMenuDropdownProps, MenuItemProps as MantineMenuItemProps, MenuDividerProps as MantineMenuDividerProps, MenuLabelProps as MantineMenuLabelProps, MenuSubProps as MantineMenuSubProps, MenuSubTargetProps as MantineMenuSubTargetProps, MenuSubDropdownProps as MantineMenuSubDropdownProps } from '@mantine/core';
|
|
2
|
+
import { RecursicaOverStyled } from '../../utils/filterStylingProps';
|
|
3
|
+
/**
|
|
4
|
+
* Recursica Menu component wrapping Mantine's composable Menu.
|
|
5
|
+
*
|
|
6
|
+
* Usage follows the composable dot-notation pattern:
|
|
7
|
+
* ```tsx
|
|
8
|
+
* <Menu>
|
|
9
|
+
* <Menu.Target><Button>Open</Button></Menu.Target>
|
|
10
|
+
* <Menu.Dropdown>
|
|
11
|
+
* <Menu.Label>Section</Menu.Label>
|
|
12
|
+
* <Menu.Item>Action</Menu.Item>
|
|
13
|
+
* <Menu.Divider />
|
|
14
|
+
* <Menu.Item>Another action</Menu.Item>
|
|
15
|
+
* </Menu.Dropdown>
|
|
16
|
+
* </Menu>
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export type MenuProps = RecursicaOverStyled<MantineMenuProps>;
|
|
20
|
+
declare const MenuBase: {
|
|
21
|
+
({ overStyled, ...rest }: MenuProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
displayName: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Wrapper for the element that triggers the menu.
|
|
26
|
+
* Requires a single child element that supports ref forwarding.
|
|
27
|
+
*/
|
|
28
|
+
export type MenuTargetProps = MantineMenuTargetProps;
|
|
29
|
+
declare const MenuTarget: {
|
|
30
|
+
(props: MenuTargetProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
displayName: string;
|
|
32
|
+
};
|
|
33
|
+
/** The dropdown panel containing menu items, dividers, and labels. */
|
|
34
|
+
export type MenuDropdownProps = RecursicaOverStyled<MantineMenuDropdownProps>;
|
|
35
|
+
declare const MenuDropdown: import('react').ForwardRefExoticComponent<MenuDropdownProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
36
|
+
/**
|
|
37
|
+
* An individual actionable item within the menu dropdown.
|
|
38
|
+
*
|
|
39
|
+
* **Note:** Mantine's `color` prop is stripped in strict mode to enforce
|
|
40
|
+
* design token adherence. Use `overStyled={true}` if you need to bypass.
|
|
41
|
+
*/
|
|
42
|
+
export type MenuItemProps = RecursicaOverStyled<Omit<MantineMenuItemProps, "color">>;
|
|
43
|
+
declare const MenuItem: import('react').ForwardRefExoticComponent<MenuItemProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
44
|
+
/** A visual separator between groups of menu items. */
|
|
45
|
+
export type MenuDividerProps = RecursicaOverStyled<MantineMenuDividerProps>;
|
|
46
|
+
declare const MenuDivider: import('react').ForwardRefExoticComponent<MenuDividerProps & import('react').RefAttributes<HTMLHRElement>>;
|
|
47
|
+
/** A non-interactive section label used to categorize groups of menu items. */
|
|
48
|
+
export type MenuLabelProps = RecursicaOverStyled<MantineMenuLabelProps>;
|
|
49
|
+
declare const MenuLabel: import('react').ForwardRefExoticComponent<MenuLabelProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
50
|
+
/** Container for a submenu, wrapping Menu.Sub.Target and Menu.Sub.Dropdown. */
|
|
51
|
+
export type MenuSubProps = MantineMenuSubProps;
|
|
52
|
+
declare const MenuSubBase: {
|
|
53
|
+
(props: MenuSubProps): import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
displayName: string;
|
|
55
|
+
};
|
|
56
|
+
/** Wrapper for the element that triggers the submenu. */
|
|
57
|
+
export type MenuSubTargetProps = MantineMenuSubTargetProps;
|
|
58
|
+
declare const MenuSubTarget: {
|
|
59
|
+
(props: MenuSubTargetProps): import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
displayName: string;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* A menu item that acts as a submenu trigger.
|
|
64
|
+
* Renders within Menu.Sub.Target and displays a chevron indicator.
|
|
65
|
+
*/
|
|
66
|
+
export type MenuSubItemProps = RecursicaOverStyled<Omit<MantineMenuItemProps, "color">>;
|
|
67
|
+
declare const MenuSubItem: import('react').ForwardRefExoticComponent<MenuSubItemProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
68
|
+
/** The dropdown panel for a submenu. */
|
|
69
|
+
export type MenuSubDropdownProps = RecursicaOverStyled<MantineMenuSubDropdownProps>;
|
|
70
|
+
declare const MenuSubDropdown: import('react').ForwardRefExoticComponent<MenuSubDropdownProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
71
|
+
type MenuSubComponent = typeof MenuSubBase & {
|
|
72
|
+
Target: typeof MenuSubTarget;
|
|
73
|
+
Item: typeof MenuSubItem;
|
|
74
|
+
Dropdown: typeof MenuSubDropdown;
|
|
75
|
+
};
|
|
76
|
+
type MenuComponent = typeof MenuBase & {
|
|
77
|
+
Target: typeof MenuTarget;
|
|
78
|
+
Dropdown: typeof MenuDropdown;
|
|
79
|
+
Item: typeof MenuItem;
|
|
80
|
+
Divider: typeof MenuDivider;
|
|
81
|
+
Label: typeof MenuLabel;
|
|
82
|
+
Sub: MenuSubComponent;
|
|
83
|
+
};
|
|
84
|
+
export declare const Menu: MenuComponent;
|
|
85
|
+
export {};
|
package/package.json
CHANGED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Menu – Implementation Notes
|
|
2
|
+
|
|
3
|
+
Decisions and design tweaks strictly tailored for the UI Kit's Menu wrapped against `@mantine/core`. This is a living document that tracks _why_ specific logic decisions exist.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Composable API Preservation (1:1 Mapping)
|
|
8
|
+
|
|
9
|
+
**Decision:** We maintain the exact library composition API structure (`<Menu>`, `<Menu.Target>`, `<Menu.Dropdown>`, `<Menu.Item>`, `<Menu.Divider>`, `<Menu.Label>`, `<Menu.Sub>`, `<Menu.Sub.Target>`, `<Menu.Sub.Item>`, `<Menu.Sub.Dropdown>`) as a 1:1 React component mapping.
|
|
10
|
+
|
|
11
|
+
**Implementation:** Mantine's Menu internally manages WAI-ARIA role assignments (`role="menu"`, `role="menuitem"`, `aria-haspopup`, `aria-expanded`, `aria-controls`), keyboard navigation (arrow keys, Enter, Escape), and focus trapping natively across its composable hierarchy. By preserving the exact sub-component tree, Recursica safely adopts all of these accessibility behaviors without reimplementation.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. Hover State Overlay Technique
|
|
16
|
+
|
|
17
|
+
**Decision:** We nullify Mantine's native hover background on `Menu.Item` and exclusively utilize Recursica's hover structure via a `::after` pseudo-element overlay.
|
|
18
|
+
|
|
19
|
+
**Implementation:** The `.item::after` pseudo-object dynamically pulls `hover-color` & `hover-opacity` bindings from the Recursica token system. Mantine natively changes `background-color` on item hover which would override our token-driven colors. We enforce `background-color` to remain the unselected-item background on hover, then layer our pseudo-overlay on top. This is the same technique used in the Accordion component.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 3. Selected vs Unselected Item States
|
|
24
|
+
|
|
25
|
+
**Decision:** Menu items map to Recursica's `selected-item` and `unselected-item` color token groups.
|
|
26
|
+
|
|
27
|
+
**Implementation:** The CSS module defaults all items to `unselected-item_*` tokens (background, text, opacity). Items with `[data-selected]` switch to `selected-item_*` tokens. This mapping is natively driven by Mantine's internal state tracking without React state hooks.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 4. `color` Prop Stripping
|
|
32
|
+
|
|
33
|
+
**Decision:** Mantine's `color` prop on `Menu.Item` (used for semantics like "danger/red") is explicitly stripped in strict mode.
|
|
34
|
+
|
|
35
|
+
**Implementation:** The `color` prop is deleted from the sanitized props when `overStyled` is `false`. This enforces strict design token adherence — all item colors come from the CSS module referencing Recursica variables. Developers requiring custom color semantics must either:
|
|
36
|
+
|
|
37
|
+
1. Use `overStyled={true}` as an explicit escape hatch
|
|
38
|
+
2. Contribute a proper Recursica variant to the token system
|
|
39
|
+
|
|
40
|
+
**Rationale:** The Recursica token set does not currently include danger-specific or semantic-color variants for menu items. Allowing arbitrary `color` values would break design system consistency.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 5. Menu.Target Pass-Through
|
|
45
|
+
|
|
46
|
+
**Decision:** `Menu.Target` is a transparent pass-through with no styling applied.
|
|
47
|
+
|
|
48
|
+
**Implementation:** The target wrapper exists solely to manage Mantine's ref forwarding and event binding for the trigger element. No `filterStylingProps` or CSS module classes are applied — the trigger's appearance is entirely controlled by whatever component the integrator places inside it (e.g., `<Button>`).
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 6. Sub-Menu Support
|
|
53
|
+
|
|
54
|
+
**Decision:** We wrap the full Mantine sub-menu hierarchy (`Menu.Sub`, `Menu.Sub.Target`, `Menu.Sub.Item`, `Menu.Sub.Dropdown`).
|
|
55
|
+
|
|
56
|
+
**Implementation:** Sub-menu components inherit the same CSS module classes as their top-level counterparts since the Recursica token set does not distinguish sub-menu-specific styling. `Menu.Sub.Item` also strips the `color` prop in strict mode, consistent with `Menu.Item`. The sub-menu dropdown portal inherits the same `classNames` from the root Menu's `classNames` mapping.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 7. Dropdown Container Padding
|
|
61
|
+
|
|
62
|
+
**Decision:** The dropdown container uses `divider-item-gap` as its internal padding.
|
|
63
|
+
|
|
64
|
+
**Implementation:** This ensures consistent spacing between the dropdown border and its content items. The gap token (`4px` by default) creates a subtle inset that visually separates items from the container edge, matching the Figma design specifications.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 8. Minimal CSS Override Philosophy
|
|
69
|
+
|
|
70
|
+
**Decision:** The CSS module only overrides visual design tokens (colors, typography, spacing, borders, shadows). All structural layout properties (flex, cursor, pointer-events, box-sizing, etc.) are deferred to Mantine's native behavior.
|
|
71
|
+
|
|
72
|
+
**Implementation:** Unlike form-field components (e.g., Dropdown/TextField) which require deep structural overrides to strip Mantine's macro wrappers, the Menu is an overlay component where Mantine's native layout is already correct. We avoid setting:
|
|
73
|
+
|
|
74
|
+
- `overflow` on the dropdown (Mantine renders sub-menu dropdowns inside the parent DOM tree using Floating UI absolute positioning — setting overflow clips them)
|
|
75
|
+
- `display`, `align-items`, `width`, `cursor` on items (Mantine's button-based items already handle this)
|
|
76
|
+
- `pointer-events` on disabled items (Mantine handles disabled natively)
|
|
77
|
+
|
|
78
|
+
**Rationale:** Early iterations included aggressive structural resets (like `overflow: hidden`, `box-sizing: border-box`, `margin: 0`) cargo-culted from the Dropdown component. These caused sub-menus to render clipped inside the parent dropdown with scrollbars. The lesson: default to Mantine's native behavior and only override what the Recursica token system explicitly needs to control.
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/* HARDCODED VALUES:
|
|
2
|
+
- border-style: solid. Structural rendering rule for the dropdown border (Mantine uses Paper which may not set border natively).
|
|
3
|
+
- opacity: 0.5 on disabled items. Recursica has no dedicated disabled-opacity token for menu items.
|
|
4
|
+
- NOTE: overflow is intentionally NOT set on .dropdown. Mantine renders sub-menu dropdowns
|
|
5
|
+
inside the parent dropdown DOM tree using Floating UI absolute positioning. Setting
|
|
6
|
+
overflow: hidden clips sub-menus; overflow-y: auto causes unwanted scrollbars.
|
|
7
|
+
- All structural layout (flex, cursor, pointer-events on disabled) is deferred to Mantine's
|
|
8
|
+
native behavior. We only override visual design tokens (colors, typography, spacing, borders).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* ======================================
|
|
12
|
+
DROPDOWN CONTAINER
|
|
13
|
+
====================================== */
|
|
14
|
+
|
|
15
|
+
.dropdown {
|
|
16
|
+
background-color: var(
|
|
17
|
+
--recursica_ui-kit_components_menu_properties_colors_background
|
|
18
|
+
);
|
|
19
|
+
border-style: solid; /* HARDCODE: Mantine Paper does not set border-style natively */
|
|
20
|
+
border-width: var(--recursica_ui-kit_components_menu_properties_border-size);
|
|
21
|
+
border-color: var(
|
|
22
|
+
--recursica_ui-kit_components_menu_properties_colors_border-color
|
|
23
|
+
);
|
|
24
|
+
border-radius: var(
|
|
25
|
+
--recursica_ui-kit_components_menu_properties_border-radius
|
|
26
|
+
);
|
|
27
|
+
box-shadow: var(--recursica_ui-kit_components_menu_properties_elevation);
|
|
28
|
+
|
|
29
|
+
min-width: var(--recursica_ui-kit_components_menu_properties_min-width);
|
|
30
|
+
max-width: var(--recursica_ui-kit_components_menu_properties_max-width);
|
|
31
|
+
|
|
32
|
+
padding: var(
|
|
33
|
+
--recursica_ui-kit_components_menu-item_properties_divider-item-gap
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* ======================================
|
|
38
|
+
MENU ITEM
|
|
39
|
+
====================================== */
|
|
40
|
+
|
|
41
|
+
.item {
|
|
42
|
+
position: relative;
|
|
43
|
+
|
|
44
|
+
/* Geometry */
|
|
45
|
+
padding: var(
|
|
46
|
+
--recursica_ui-kit_components_menu-item_properties_vertical-padding
|
|
47
|
+
)
|
|
48
|
+
var(--recursica_ui-kit_components_menu-item_properties_horizontal-padding);
|
|
49
|
+
border-radius: var(
|
|
50
|
+
--recursica_ui-kit_components_menu-item_properties_border-radius
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
/* Typography */
|
|
54
|
+
font-family: var(
|
|
55
|
+
--recursica_ui-kit_components_menu-item_properties_text_font-family
|
|
56
|
+
);
|
|
57
|
+
font-size: var(
|
|
58
|
+
--recursica_ui-kit_components_menu-item_properties_text_font-size
|
|
59
|
+
);
|
|
60
|
+
font-style: var(
|
|
61
|
+
--recursica_ui-kit_components_menu-item_properties_text_font-style
|
|
62
|
+
);
|
|
63
|
+
font-weight: var(
|
|
64
|
+
--recursica_ui-kit_components_menu-item_properties_text_font-weight
|
|
65
|
+
);
|
|
66
|
+
letter-spacing: var(
|
|
67
|
+
--recursica_ui-kit_components_menu-item_properties_text_letter-spacing
|
|
68
|
+
);
|
|
69
|
+
line-height: var(
|
|
70
|
+
--recursica_ui-kit_components_menu-item_properties_text_line-height
|
|
71
|
+
);
|
|
72
|
+
text-decoration: var(
|
|
73
|
+
--recursica_ui-kit_components_menu-item_properties_text_text-decoration
|
|
74
|
+
);
|
|
75
|
+
text-transform: var(
|
|
76
|
+
--recursica_ui-kit_components_menu-item_properties_text_text-transform
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
/* Default State: Unselected */
|
|
80
|
+
background-color: var(
|
|
81
|
+
--recursica_ui-kit_components_menu-item_properties_colors_unselected-item_background
|
|
82
|
+
);
|
|
83
|
+
color: var(
|
|
84
|
+
--recursica_ui-kit_components_menu-item_properties_colors_unselected-item_text
|
|
85
|
+
);
|
|
86
|
+
opacity: var(
|
|
87
|
+
--recursica_ui-kit_components_menu-item_properties_colors_unselected-item_opacity
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* Override Mantine's native hover background to use our overlay technique */
|
|
92
|
+
.item:hover {
|
|
93
|
+
background-color: var(
|
|
94
|
+
--recursica_ui-kit_components_menu-item_properties_colors_unselected-item_background
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* Hover overlay using ::after pseudo-element (same technique as Accordion) */
|
|
99
|
+
.item::after {
|
|
100
|
+
content: "";
|
|
101
|
+
position: absolute;
|
|
102
|
+
inset: 0;
|
|
103
|
+
border-radius: inherit;
|
|
104
|
+
z-index: 0;
|
|
105
|
+
pointer-events: none;
|
|
106
|
+
background-color: var(
|
|
107
|
+
--recursica_ui-kit_components_menu-item_properties_hover-color
|
|
108
|
+
);
|
|
109
|
+
opacity: 0;
|
|
110
|
+
transition: opacity 150ms ease;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.item:hover:not([data-disabled])::after {
|
|
114
|
+
opacity: var(
|
|
115
|
+
--recursica_ui-kit_components_menu-item_properties_hover-opacity,
|
|
116
|
+
0.1
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Selected item state */
|
|
121
|
+
.item[data-selected] {
|
|
122
|
+
background-color: var(
|
|
123
|
+
--recursica_ui-kit_components_menu-item_properties_colors_selected-item_background
|
|
124
|
+
);
|
|
125
|
+
color: var(
|
|
126
|
+
--recursica_ui-kit_components_menu-item_properties_colors_selected-item_text
|
|
127
|
+
);
|
|
128
|
+
opacity: var(
|
|
129
|
+
--recursica_ui-kit_components_menu-item_properties_colors_selected-item_opacity
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Hovered item state (keyboard navigation) */
|
|
134
|
+
.item[data-hovered] {
|
|
135
|
+
background-color: var(
|
|
136
|
+
--recursica_ui-kit_components_menu-item_properties_colors_unselected-item_background
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
.item[data-hovered]::after {
|
|
140
|
+
opacity: var(
|
|
141
|
+
--recursica_ui-kit_components_menu-item_properties_hover-opacity,
|
|
142
|
+
0.1
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* Disabled item */
|
|
147
|
+
.item[data-disabled] {
|
|
148
|
+
/* HARDCODE: 0.5 opacity fallback; no dedicated disabled-opacity token for menu items */
|
|
149
|
+
opacity: 0.5;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* ======================================
|
|
153
|
+
ITEM LABEL
|
|
154
|
+
====================================== */
|
|
155
|
+
|
|
156
|
+
.itemLabel {
|
|
157
|
+
position: relative;
|
|
158
|
+
z-index: 1;
|
|
159
|
+
color: inherit;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* ======================================
|
|
163
|
+
ITEM SECTION (LEFT / RIGHT ICONS)
|
|
164
|
+
====================================== */
|
|
165
|
+
|
|
166
|
+
.itemSection {
|
|
167
|
+
position: relative;
|
|
168
|
+
z-index: 1;
|
|
169
|
+
color: inherit;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* ======================================
|
|
173
|
+
DIVIDER
|
|
174
|
+
====================================== */
|
|
175
|
+
|
|
176
|
+
.divider {
|
|
177
|
+
height: var(
|
|
178
|
+
--recursica_ui-kit_components_menu-item_properties_divider-height
|
|
179
|
+
);
|
|
180
|
+
background-color: var(
|
|
181
|
+
--recursica_ui-kit_components_menu-item_properties_colors_divider-color
|
|
182
|
+
);
|
|
183
|
+
opacity: var(
|
|
184
|
+
--recursica_ui-kit_components_menu-item_properties_divider-opacity
|
|
185
|
+
);
|
|
186
|
+
margin: var(
|
|
187
|
+
--recursica_ui-kit_components_menu-item_properties_divider-item-gap
|
|
188
|
+
)
|
|
189
|
+
0;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* ======================================
|
|
193
|
+
SECTION LABEL
|
|
194
|
+
====================================== */
|
|
195
|
+
|
|
196
|
+
.label {
|
|
197
|
+
padding: var(
|
|
198
|
+
--recursica_ui-kit_components_menu-item_properties_vertical-padding
|
|
199
|
+
)
|
|
200
|
+
var(--recursica_ui-kit_components_menu-item_properties_horizontal-padding);
|
|
201
|
+
|
|
202
|
+
/* Supporting Text Typography */
|
|
203
|
+
font-family: var(
|
|
204
|
+
--recursica_ui-kit_components_menu-item_properties_supporting-text_font-family
|
|
205
|
+
);
|
|
206
|
+
font-size: var(
|
|
207
|
+
--recursica_ui-kit_components_menu-item_properties_supporting-text_font-size
|
|
208
|
+
);
|
|
209
|
+
font-style: var(
|
|
210
|
+
--recursica_ui-kit_components_menu-item_properties_supporting-text_font-style
|
|
211
|
+
);
|
|
212
|
+
font-weight: var(
|
|
213
|
+
--recursica_ui-kit_components_menu-item_properties_supporting-text_font-weight
|
|
214
|
+
);
|
|
215
|
+
letter-spacing: var(
|
|
216
|
+
--recursica_ui-kit_components_menu-item_properties_supporting-text_letter-spacing
|
|
217
|
+
);
|
|
218
|
+
line-height: var(
|
|
219
|
+
--recursica_ui-kit_components_menu-item_properties_supporting-text_line-height
|
|
220
|
+
);
|
|
221
|
+
text-decoration: var(
|
|
222
|
+
--recursica_ui-kit_components_menu-item_properties_supporting-text_text-decoration
|
|
223
|
+
);
|
|
224
|
+
text-transform: var(
|
|
225
|
+
--recursica_ui-kit_components_menu-item_properties_supporting-text_text-transform
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
color: var(
|
|
229
|
+
--recursica_ui-kit_components_menu-item_properties_colors_unselected-item_supporting-text-color
|
|
230
|
+
);
|
|
231
|
+
opacity: var(
|
|
232
|
+
--recursica_ui-kit_components_menu-item_properties_colors_unselected-item_supporting-text-opacity
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* ======================================
|
|
237
|
+
SUB-MENU CHEVRON
|
|
238
|
+
====================================== */
|
|
239
|
+
|
|
240
|
+
.chevron {
|
|
241
|
+
position: relative;
|
|
242
|
+
z-index: 1;
|
|
243
|
+
color: inherit;
|
|
244
|
+
}
|