@recursica/mui-adapter 0.18.1 → 0.19.1

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 (52) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -3
  3. package/dist/mui-adapter.cjs +172 -23
  4. package/dist/mui-adapter.cjs.map +1 -1
  5. package/dist/mui-adapter.css +1 -1
  6. package/dist/mui-adapter.js +12963 -4695
  7. package/dist/mui-adapter.js.map +1 -1
  8. package/dist/src/components/Tree/Tree.d.ts +9 -5
  9. package/docs/PHILOSOPHY.md +39 -0
  10. package/package.json +8 -2
  11. package/src/components/Accordion/Accordion.module.css +98 -62
  12. package/src/components/Autocomplete/Autocomplete.module.css +50 -47
  13. package/src/components/Autocomplete/Autocomplete.tsx +2 -2
  14. package/src/components/Avatar/Avatar.module.css +7 -7
  15. package/src/components/Badge/Badge.module.css +8 -8
  16. package/src/components/Button/Button.module.css +25 -43
  17. package/src/components/Card/Card.module.css +3 -3
  18. package/src/components/Checkbox/Checkbox.module.css +57 -16
  19. package/src/components/Chip/Chip.module.css +32 -20
  20. package/src/components/Dropdown/Dropdown.module.css +47 -44
  21. package/src/components/Dropdown/Dropdown.tsx +2 -2
  22. package/src/components/FormControlWrapper/FormControlWrapper.module.css +12 -12
  23. package/src/components/HoverCard/HoverCard.module.css +1 -1
  24. package/src/components/Label/Label.module.css +20 -3
  25. package/src/components/Link/Link.module.css +18 -71
  26. package/src/components/Loader/Loader.module.css +3 -3
  27. package/src/components/Menu/Menu.module.css +33 -41
  28. package/src/components/Modal/Modal.module.css +27 -11
  29. package/src/components/NumberInput/NumberInput.module.css +39 -37
  30. package/src/components/NumberInput/NumberInput.tsx +2 -2
  31. package/src/components/Pagination/Pagination.module.css +10 -43
  32. package/src/components/Panel/Panel.module.css +3 -3
  33. package/src/components/Radio/Radio.module.css +32 -15
  34. package/src/components/ReadOnlyField/ReadOnlyField.module.css +1 -1
  35. package/src/components/SegmentedControl/SegmentedControl.module.css +37 -29
  36. package/src/components/Slider/Slider.module.css +51 -35
  37. package/src/components/Stepper/Stepper.module.css +3 -3
  38. package/src/components/Switch/Switch.module.css +27 -11
  39. package/src/components/Tabs/Tabs.module.css +309 -166
  40. package/src/components/TextArea/TextArea.module.css +36 -21
  41. package/src/components/TextArea/TextArea.tsx +2 -2
  42. package/src/components/TextField/TextField.module.css +38 -33
  43. package/src/components/TextField/TextField.tsx +2 -2
  44. package/src/components/Timeline/IMPLEMENTATION_NOTES.md +5 -0
  45. package/src/components/Timeline/Timeline.module.css +35 -34
  46. package/src/components/Toast/Toast.module.css +24 -11
  47. package/src/components/Tooltip/Tooltip.module.css +4 -2
  48. package/src/components/Tree/IMPLEMENTATION_NOTES.md +21 -0
  49. package/src/components/Tree/Tree.module.css +204 -39
  50. package/src/components/Tree/Tree.stories.tsx +81 -4
  51. package/src/components/Tree/Tree.tsx +214 -13
  52. package/src/components/Tree/USAGE.md +40 -3
@@ -1,23 +1,36 @@
1
1
  /* EXEMPTIONS:
2
- - state-specific border-size variables are ignored because a uniform 1px border is applied globally to prevent
2
+ - state-specific border-size variables are ignored because a uniform 1px border is applied globally to prevent
3
3
  unexpected layout shift or flickering during focus, disabled, or error state transitions. */
4
- /* recursica-ignore: --recursica_ui-kit_components_dropdown_variants_states_default_properties_border-size */
4
+ /* recursica-ignore: --recursica_ui-kit_components_dropdown_properties_border-size */
5
5
  /* recursica-ignore: --recursica_ui-kit_components_dropdown_variants_states_disabled_properties_border-size */
6
6
  /* recursica-ignore: --recursica_ui-kit_components_dropdown_variants_states_error_properties_border-size */
7
- /* recursica-ignore: --recursica_ui-kit_components_dropdown_variants_states_focus_properties_border-size */
8
7
 
9
8
  /* LAYOUT SPACING OVERRIDES:
10
- - Sets the --form-control-margin-bottom spacing hook to map component-specific layout tokens. */
9
+ - Sets the --form-control-margin-bottom spacing hook to map component-specific layout tokens.
10
+ - Also sets the --dropdown-control-{max,min}-width hooks consumed inline in Dropdown.tsx, since
11
+ the token schema no longer provides a single layout-agnostic min/max width. */
11
12
  .layoutOverride {
12
13
  --form-control-margin-bottom: var(
13
14
  --recursica_ui-kit_components_dropdown_variants_layouts_stacked_properties_top-bottom-margin
14
15
  );
16
+ --dropdown-control-max-width: var(
17
+ --recursica_ui-kit_components_dropdown_variants_layouts_stacked_properties_max-width
18
+ );
19
+ --dropdown-control-min-width: var(
20
+ --recursica_ui-kit_components_dropdown_variants_layouts_stacked_properties_min-width
21
+ );
15
22
  }
16
23
 
17
24
  .layoutOverride[data-form-layout="side-by-side"] {
18
25
  --form-control-margin-bottom: var(
19
26
  --recursica_ui-kit_components_dropdown_variants_layouts_side-by-side_properties_top-bottom-margin
20
27
  );
28
+ --dropdown-control-max-width: var(
29
+ --recursica_ui-kit_components_dropdown_variants_layouts_side-by-side_properties_max-width
30
+ );
31
+ --dropdown-control-min-width: var(
32
+ --recursica_ui-kit_components_dropdown_variants_layouts_side-by-side_properties_min-width
33
+ );
21
34
  }
22
35
 
23
36
  /* HARDCODED VALUES:
@@ -101,13 +114,13 @@
101
114
 
102
115
  /* Base State Default Execution */
103
116
  background-color: var(
104
- --recursica_ui-kit_components_dropdown_variants_states_default_properties_colors_background
117
+ --recursica_ui-kit_components_dropdown_properties_colors_background-color
105
118
  );
106
119
  border-color: var(
107
- --recursica_ui-kit_components_dropdown_variants_states_default_properties_colors_border-color
120
+ --recursica_ui-kit_components_dropdown_properties_colors_border-color
108
121
  );
109
122
  color: var(
110
- --recursica_ui-kit_components_dropdown_variants_states_default_properties_colors_text
123
+ --recursica_ui-kit_components_dropdown_properties_colors_text-color
111
124
  );
112
125
 
113
126
  outline: none;
@@ -153,13 +166,13 @@
153
166
  width: var(--recursica_ui-kit_components_dropdown_properties_icon-size);
154
167
  height: var(--recursica_ui-kit_components_dropdown_properties_icon-size);
155
168
  color: var(
156
- --recursica_ui-kit_components_dropdown_variants_states_default_properties_colors_leading-icon
169
+ --recursica_ui-kit_components_dropdown_properties_colors_leading-icon
157
170
  );
158
171
  }
159
172
 
160
173
  .section[data-position="right"] :global(svg) {
161
174
  color: var(
162
- --recursica_ui-kit_components_dropdown_variants_states_default_properties_colors_trailing-icon
175
+ --recursica_ui-kit_components_dropdown_properties_colors_trailing-icon
163
176
  );
164
177
  }
165
178
 
@@ -168,29 +181,16 @@
168
181
  -------------------------------------- */
169
182
 
170
183
  /* Focus State Mapping (Triggered internally via browser pseudo-pseudo-class) */
184
+ /* The token schema no longer provides per-component focus colors; apply the generic focus ring
185
+ tokens as a box-shadow ring instead of a color swap. */
171
186
  .input:focus-within,
172
187
  .input:focus {
173
- border-color: var(
174
- --recursica_ui-kit_components_dropdown_variants_states_focus_properties_colors_border-color
175
- );
176
- background-color: var(
177
- --recursica_ui-kit_components_dropdown_variants_states_focus_properties_colors_background
178
- );
179
- color: var(
180
- --recursica_ui-kit_components_dropdown_variants_states_focus_properties_colors_text
181
- );
182
- }
183
-
184
- .root:focus-within .section[data-position="left"] :global(svg) {
185
- color: var(
186
- --recursica_ui-kit_components_dropdown_variants_states_focus_properties_colors_leading-icon
187
- );
188
- }
189
-
190
- .root:focus-within .section[data-position="right"] :global(svg) {
191
- color: var(
192
- --recursica_ui-kit_components_dropdown_variants_states_focus_properties_colors_trailing-icon
193
- );
188
+ box-shadow:
189
+ 0 0 0 var(--recursica_brand_states_focus_border-size)
190
+ var(--recursica_brand_states_focus_color),
191
+ 0 0 var(--recursica_brand_states_focus_blur)
192
+ var(--recursica_brand_states_focus_margin)
193
+ var(--recursica_brand_states_focus_color);
194
194
  }
195
195
 
196
196
  /* Error State Mapping (Propagated strictly down from the wrapper DOM context) */
@@ -199,10 +199,10 @@
199
199
  --recursica_ui-kit_components_dropdown_variants_states_error_properties_colors_border-color
200
200
  ) !important;
201
201
  background-color: var(
202
- --recursica_ui-kit_components_dropdown_variants_states_error_properties_colors_background
202
+ --recursica_ui-kit_components_dropdown_variants_states_error_properties_colors_background-color
203
203
  ) !important;
204
204
  color: var(
205
- --recursica_ui-kit_components_dropdown_variants_states_error_properties_colors_text
205
+ --recursica_ui-kit_components_dropdown_variants_states_error_properties_colors_text-color
206
206
  ) !important;
207
207
  }
208
208
 
@@ -224,10 +224,13 @@
224
224
  --recursica_ui-kit_components_dropdown_variants_states_disabled_properties_colors_border-color
225
225
  ) !important;
226
226
  background-color: var(
227
- --recursica_ui-kit_components_dropdown_variants_states_disabled_properties_colors_background
227
+ --recursica_ui-kit_components_dropdown_variants_states_disabled_properties_colors_background-color
228
228
  ) !important;
229
229
  color: var(
230
- --recursica_ui-kit_components_dropdown_variants_states_disabled_properties_colors_text
230
+ --recursica_ui-kit_components_dropdown_variants_states_disabled_properties_colors_text-color
231
+ ) !important;
232
+ opacity: var(
233
+ --recursica_ui-kit_components_dropdown_variants_states_disabled_properties_opacity
231
234
  ) !important;
232
235
  cursor: not-allowed;
233
236
  }
@@ -250,12 +253,10 @@
250
253
 
251
254
  .dropdown {
252
255
  background-color: var(
253
- --recursica_ui-kit_components_dropdown_variants_states_default_properties_colors_background
256
+ --recursica_ui-kit_components_dropdown_properties_colors_background-color
254
257
  );
255
258
  border: 1px solid
256
- var(
257
- --recursica_ui-kit_components_dropdown_variants_states_default_properties_colors_border-color
258
- );
259
+ var(--recursica_ui-kit_components_dropdown_properties_colors_border-color);
259
260
  border-radius: var(
260
261
  --recursica_ui-kit_components_dropdown_properties_border-radius
261
262
  );
@@ -273,7 +274,7 @@
273
274
  --recursica_ui-kit_components_dropdown_properties_text_font-weight
274
275
  );
275
276
  color: var(
276
- --recursica_ui-kit_components_dropdown_variants_states_default_properties_colors_text
277
+ --recursica_ui-kit_components_dropdown_properties_colors_text-color
277
278
  );
278
279
  padding: calc(
279
280
  var(--recursica_ui-kit_components_dropdown_properties_vertical-padding) *
@@ -283,14 +284,16 @@
283
284
  cursor: pointer;
284
285
  }
285
286
 
287
+ /* No per-option selected/hovered tokens exist in the schema; use the generic overlay tint
288
+ (same technique as the Mantine reference implementation) to highlight the active option. */
286
289
  .option[data-selected="true"],
287
290
  .option[data-combobox-selected="true"],
288
291
  .option[data-hovered="true"],
289
292
  .option:hover {
290
- background-color: var(
291
- --recursica_ui-kit_components_dropdown_variants_states_focus_properties_colors_background
292
- );
293
- color: var(
294
- --recursica_ui-kit_components_dropdown_variants_states_focus_properties_colors_text
293
+ background-color: color-mix(
294
+ in srgb,
295
+ var(--recursica_brand_states_hover_color)
296
+ calc(var(--recursica_brand_states_hover_opacity) * 100%),
297
+ transparent
295
298
  );
296
299
  }
@@ -120,8 +120,8 @@ export const Dropdown = forwardRef<HTMLInputElement, DropdownProps>(
120
120
  <WithReadOnlyWrapper
121
121
  className={wrapperClass}
122
122
  style={injectedStyles}
123
- controlMaxWidth="var(--recursica_ui-kit_components_dropdown_properties_max-width)"
124
- controlMinWidth="var(--recursica_ui-kit_components_dropdown_properties_min-width)"
123
+ controlMaxWidth="var(--dropdown-control-max-width)"
124
+ controlMinWidth="var(--dropdown-control-min-width)"
125
125
  overStyled={overStyled as true}
126
126
  formLayout={formLayout}
127
127
  labelSize={labelSize}
@@ -10,28 +10,29 @@
10
10
 
11
11
  /* Global Form Field Colors */
12
12
  --form-field-background: var(
13
- --recursica_ui-kit_globals_form_field_colors_background
13
+ --recursica_ui-kit_globals_form_field_colors_background-color
14
14
  );
15
15
  --form-field-background-read-only: var(
16
- --recursica_ui-kit_globals_form_field_colors_background-read-only
16
+ --recursica_ui-kit_globals_form_field_colors_background-color-read-only
17
17
  );
18
- --form-field-border: var(--recursica_ui-kit_globals_form_field_colors_border);
19
- --form-field-border-error: var(
20
- --recursica_ui-kit_globals_form_field_colors_border-error
18
+ --form-field-border: var(
19
+ --recursica_ui-kit_globals_form_field_colors_border-color
21
20
  );
22
- --form-field-border-focus: var(
23
- --recursica_ui-kit_globals_form_field_colors_border-focus
21
+ --form-field-border-error: var(
22
+ --recursica_ui-kit_globals_form_field_colors_error-border-color
24
23
  );
25
24
  --form-field-border-selected: var(
26
25
  --recursica_ui-kit_globals_form_field_colors_border-selected
27
26
  );
28
27
  --form-field-disabled-background: var(
29
- --recursica_ui-kit_globals_form_field_colors_disabled-background
28
+ --recursica_ui-kit_globals_form_field_colors_disabled-background-color
30
29
  );
31
30
  --form-field-disabled-text: var(
32
31
  --recursica_ui-kit_globals_form_field_colors_disabled-text
33
32
  );
34
- --form-field-icon: var(--recursica_ui-kit_globals_form_field_colors_icon);
33
+ --form-field-icon: var(
34
+ --recursica_ui-kit_globals_form_field_colors_icon-color
35
+ );
35
36
  --form-field-placeholder-text-opacity: var(
36
37
  --recursica_ui-kit_globals_form_field_colors_placeholder-text-opacity
37
38
  );
@@ -40,15 +41,14 @@
40
41
  );
41
42
 
42
43
  /* Global Form Field Geometric Sizes */
44
+ /* No focus-specific border-color/border-size tokens exist anymore; components use the generic
45
+ --recursica_brand_states_focus_* ring tokens directly instead (see e.g. TextField.module.css). */
43
46
  --form-field-border-radius: var(
44
47
  --recursica_ui-kit_globals_form_field_size_border-radius
45
48
  );
46
49
  --form-field-border-size-default: var(
47
50
  --recursica_ui-kit_globals_form_field_size_border-size-default
48
51
  );
49
- --form-field-border-size-focus: var(
50
- --recursica_ui-kit_globals_form_field_size_border-size-focus
51
- );
52
52
  --form-field-horizontal-padding: var(
53
53
  --recursica_ui-kit_globals_form_field_size_horizontal-padding
54
54
  );
@@ -19,7 +19,7 @@
19
19
 
20
20
  .dropdown {
21
21
  background-color: var(
22
- --recursica_ui-kit_components_hover-card-popover_properties_colors_background
22
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_background-color
23
23
  );
24
24
  border-style: solid; /* HARDCODE: Mantine Paper does not set border-style natively */
25
25
  border-width: var(
@@ -1,3 +1,9 @@
1
+ /* EXEMPTIONS:
2
+ - layouts_stacked sizes width variables are ignored because stacked labels naturally occupy 100% width block-level
3
+ real estate in HTML rendering, making explicit width properties redundant. Mirrors the mantine-adapter reference. */
4
+ /* recursica-ignore: --recursica_ui-kit_components_label_variants_layouts_stacked_variants_sizes_default_properties_width */
5
+ /* recursica-ignore: --recursica_ui-kit_components_label_variants_layouts_stacked_variants_sizes_small_properties_width */
6
+
1
7
  .root {
2
8
  /* Prevent default MUI absolute positioning logic */
3
9
  position: relative;
@@ -37,7 +43,7 @@
37
43
  --recursica_ui-kit_components_label_properties_label-text_text-transform
38
44
  );
39
45
 
40
- color: var(--recursica_ui-kit_components_label_properties_colors_text);
46
+ color: var(--recursica_ui-kit_components_label_properties_colors_text-color);
41
47
  }
42
48
 
43
49
  .innerLayout {
@@ -56,7 +62,9 @@
56
62
 
57
63
  .required {
58
64
  /* Override the `.MuiInputLabel-asterisk` natively */
59
- color: var(--recursica_ui-kit_components_label_properties_colors_asterisk);
65
+ color: var(
66
+ --recursica_ui-kit_components_label_properties_colors_asterisk-color
67
+ );
60
68
  margin-left: var(
61
69
  --recursica_ui-kit_components_label_properties_required-indicator-gap
62
70
  );
@@ -70,7 +78,7 @@
70
78
  We explicitly override this bleed to prevent the main label text from turning red,
71
79
  while allowing the asterisk to take the error color! */
72
80
  .root:global(.Mui-error) {
73
- color: var(--recursica_ui-kit_components_label_properties_colors_text);
81
+ color: var(--recursica_ui-kit_components_label_properties_colors_text-color);
74
82
  }
75
83
  .root:global(.Mui-error) .required {
76
84
  color: var(
@@ -112,11 +120,17 @@
112
120
  text-transform: var(
113
121
  --recursica_ui-kit_components_label_properties_optional-text_text-transform
114
122
  );
123
+ opacity: var(
124
+ --recursica_ui-kit_components_label_properties_optional-text-opacity
125
+ );
115
126
  }
116
127
 
117
128
  .actionArea {
118
129
  display: flex;
119
130
  align-items: center;
131
+ margin-left: var(
132
+ --recursica_ui-kit_components_label_properties_edit-icon-gap
133
+ );
120
134
  }
121
135
 
122
136
  .editIcon {
@@ -127,6 +141,9 @@
127
141
  background: none;
128
142
  border: none;
129
143
  padding: 0;
144
+ margin-left: var(
145
+ --recursica_ui-kit_components_label_properties_edit-icon-gap
146
+ );
130
147
 
131
148
  width: 16px;
132
149
  height: 16px;
@@ -1,4 +1,9 @@
1
- /*
1
+ /* EXEMPTIONS:
2
+ - text_text-transform is ignored because links naturally inherit casing directly from text
3
+ children rather than requiring custom CSS transforms. Mirrors the mantine-adapter reference. */
4
+ /* recursica-ignore: --recursica_ui-kit_components_link_properties_text_text-transform */
5
+
6
+ /*
2
7
  HARDCODED VALUES:
3
8
  - display: inline-flex; (Base layout to align icon and text correctly)
4
9
  - align-items: center;
@@ -16,31 +21,27 @@ HARDCODED VALUES:
16
21
  text-decoration: none;
17
22
  color: inherit;
18
23
 
19
- /* Typography Default Tokens */
24
+ /* Typography Tokens */
20
25
  font-family: var(
21
26
  --recursica_ui-kit_components_link_properties_text_font-family
22
27
  );
23
28
  font-size: var(--recursica_ui-kit_components_link_properties_text_font-size);
29
+ font-style: var(
30
+ --recursica_ui-kit_components_link_properties_text_font-style
31
+ );
32
+ font-weight: var(
33
+ --recursica_ui-kit_components_link_properties_text_font-weight
34
+ );
24
35
  letter-spacing: var(
25
36
  --recursica_ui-kit_components_link_properties_text_letter-spacing
26
37
  );
27
38
  line-height: var(
28
39
  --recursica_ui-kit_components_link_properties_text_line-height
29
40
  );
30
-
31
- /* Default State Tokens */
32
- font-style: var(
33
- --recursica_ui-kit_components_link_variants_states_default_properties_text_font-style
34
- );
35
- font-weight: var(
36
- --recursica_ui-kit_components_link_variants_states_default_properties_text_font-weight
37
- );
38
41
  text-decoration: var(
39
- --recursica_ui-kit_components_link_variants_states_default_properties_text_text-decoration
40
- );
41
- color: var(
42
- --recursica_ui-kit_components_link_variants_states_default_properties_colors_text
42
+ --recursica_ui-kit_components_link_properties_text_text-decoration
43
43
  );
44
+ color: var(--recursica_ui-kit_components_link_properties_colors_text-color);
44
45
  }
45
46
 
46
47
  .root[data-has-icon] {
@@ -49,49 +50,9 @@ HARDCODED VALUES:
49
50
  gap: var(--recursica_ui-kit_components_link_properties_icon-text-gap);
50
51
  }
51
52
 
52
- .root:hover {
53
- /* Reset Mantine's potential hover override */
54
- text-decoration: var(
55
- --recursica_ui-kit_components_link_variants_states_hover_properties_text_text-decoration
56
- );
57
- font-style: var(
58
- --recursica_ui-kit_components_link_variants_states_hover_properties_text_font-style
59
- );
60
- font-weight: var(
61
- --recursica_ui-kit_components_link_variants_states_hover_properties_text_font-weight
62
- );
63
- color: var(
64
- --recursica_ui-kit_components_link_variants_states_hover_properties_colors_text
65
- );
66
- }
67
-
68
53
  .root:visited {
69
- text-decoration: var(
70
- --recursica_ui-kit_components_link_variants_states_visited_properties_text_text-decoration
71
- );
72
- font-style: var(
73
- --recursica_ui-kit_components_link_variants_states_visited_properties_text_font-style
74
- );
75
- font-weight: var(
76
- --recursica_ui-kit_components_link_variants_states_visited_properties_text_font-weight
77
- );
78
- color: var(
79
- --recursica_ui-kit_components_link_variants_states_visited_properties_colors_text
80
- );
81
- }
82
-
83
- .root:visited:hover {
84
- text-decoration: var(
85
- --recursica_ui-kit_components_link_variants_states_visited-hover_properties_text_text-decoration
86
- );
87
- font-style: var(
88
- --recursica_ui-kit_components_link_variants_states_visited-hover_properties_text_font-style
89
- );
90
- font-weight: var(
91
- --recursica_ui-kit_components_link_variants_states_visited-hover_properties_text_font-weight
92
- );
93
54
  color: var(
94
- --recursica_ui-kit_components_link_variants_states_visited-hover_properties_colors_text
55
+ --recursica_ui-kit_components_link_variants_states_visited_properties_colors_text-color
95
56
  );
96
57
  }
97
58
 
@@ -104,26 +65,12 @@ HARDCODED VALUES:
104
65
 
105
66
  width: var(--recursica_ui-kit_components_link_properties_icon-size);
106
67
  height: var(--recursica_ui-kit_components_link_properties_icon-size);
107
- color: var(
108
- --recursica_ui-kit_components_link_variants_states_default_properties_colors_icon
109
- );
110
- }
111
-
112
- .root:hover .iconWrapper {
113
- color: var(
114
- --recursica_ui-kit_components_link_variants_states_hover_properties_colors_icon
115
- );
68
+ color: var(--recursica_ui-kit_components_link_properties_colors_icon-color);
116
69
  }
117
70
 
118
71
  .root:visited .iconWrapper {
119
72
  color: var(
120
- --recursica_ui-kit_components_link_variants_states_visited_properties_colors_icon
121
- );
122
- }
123
-
124
- .root:visited:hover .iconWrapper {
125
- color: var(
126
- --recursica_ui-kit_components_link_variants_states_visited-hover_properties_colors_icon
73
+ --recursica_ui-kit_components_link_variants_states_visited_properties_colors_icon-color
127
74
  );
128
75
  }
129
76
 
@@ -19,7 +19,7 @@
19
19
  }
20
20
  .root[data-size="small"][data-variant="oval"] {
21
21
  --loader-thickness: var(
22
- --recursica_ui-kit_components_loader_variants_sizes_small_properties_thickness
22
+ --recursica_ui-kit_components_loader_variants_sizes_small_properties_thickness-size
23
23
  );
24
24
  }
25
25
  .root[data-size="small"]:not([data-variant="oval"]) span {
@@ -36,7 +36,7 @@
36
36
  }
37
37
  .root[data-size="default"][data-variant="oval"] {
38
38
  --loader-thickness: var(
39
- --recursica_ui-kit_components_loader_variants_sizes_default_properties_thickness
39
+ --recursica_ui-kit_components_loader_variants_sizes_default_properties_thickness-size
40
40
  );
41
41
  }
42
42
  .root[data-size="default"]:not([data-variant="oval"]) span {
@@ -53,7 +53,7 @@
53
53
  }
54
54
  .root[data-size="large"][data-variant="oval"] {
55
55
  --loader-thickness: var(
56
- --recursica_ui-kit_components_loader_variants_sizes_large_properties_thickness
56
+ --recursica_ui-kit_components_loader_variants_sizes_large_properties_thickness-size
57
57
  );
58
58
  }
59
59
  .root[data-size="large"]:not([data-variant="oval"]) span {
@@ -1,16 +1,17 @@
1
1
  /* EXEMPTIONS:
2
- - colors_selected-item_supporting-text-color is ignored because selected menu items do not render
3
- supporting secondary text, making selected state overrides for supporting text colors obsolete. */
4
- /* recursica-ignore: --recursica_ui-kit_components_menu-item_properties_colors_selected-item_supporting-text-color */
2
+ - colors_supporting-text-color (selected variant) is ignored because selected menu items do not render
3
+ supporting secondary text, making the selected-state override for supporting text colors obsolete. */
4
+ /* recursica-ignore: --recursica_ui-kit_components_menu-item_variants_selection-states_selected_properties_colors_supporting-text-color */
5
5
 
6
6
  /* HARDCODED VALUES:
7
7
  - border-style: solid. Structural rendering rule for the dropdown border (Mantine uses Paper which may not set border natively).
8
- - opacity: 0.5 on disabled items. Recursica has no dedicated disabled-opacity token for menu items.
9
8
  - NOTE: overflow is intentionally NOT set on .dropdown. Mantine renders sub-menu dropdowns
10
9
  inside the parent dropdown DOM tree using Floating UI absolute positioning. Setting
11
10
  overflow: hidden clips sub-menus; overflow-y: auto causes unwanted scrollbars.
12
11
  - All structural layout (flex, cursor, pointer-events on disabled) is deferred to Mantine's
13
12
  native behavior. We only override visual design tokens (colors, typography, spacing, borders).
13
+ - Hover overlay: the schema no longer provides per-item hover-color/hover-opacity tokens; the
14
+ overlay now uses the generic --recursica_brand_states_hover_* tokens shared across components.
14
15
  */
15
16
 
16
17
  /* ======================================
@@ -19,7 +20,7 @@
19
20
 
20
21
  .dropdown {
21
22
  background-color: var(
22
- --recursica_ui-kit_components_menu_properties_colors_background
23
+ --recursica_ui-kit_components_menu_properties_colors_background-color
23
24
  );
24
25
  border-style: solid; /* HARDCODE: Mantine Paper does not set border-style natively */
25
26
  border-width: var(--recursica_ui-kit_components_menu_properties_border-size);
@@ -34,10 +35,7 @@
34
35
  min-width: var(--recursica_ui-kit_components_menu_properties_min-width);
35
36
  max-height: var(--recursica_ui-kit_components_menu_properties_max-height);
36
37
  max-width: var(--recursica_ui-kit_components_menu_properties_max-width);
37
-
38
- /* HARDCODE: Figma UI Kit does not export padding tokens for the Menu container itself.
39
- If added in the future, it would be mapped here. */
40
- padding: 8px;
38
+ padding: var(--recursica_ui-kit_components_menu_properties_padding);
41
39
  }
42
40
 
43
41
  /* ======================================
@@ -55,6 +53,7 @@
55
53
  border-radius: var(
56
54
  --recursica_ui-kit_components_menu-item_properties_border-radius
57
55
  );
56
+ margin-bottom: var(--recursica_ui-kit_components_menu_properties_item-gap);
58
57
 
59
58
  /* Typography */
60
59
  font-family: var(
@@ -84,22 +83,27 @@
84
83
 
85
84
  /* Default State: Unselected */
86
85
  background-color: var(
87
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_background
86
+ --recursica_ui-kit_components_menu-item_variants_selection-states_unselected_properties_colors_background-color
88
87
  );
89
88
  color: var(
90
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_text
89
+ --recursica_ui-kit_components_menu-item_variants_selection-states_unselected_properties_colors_text-color
91
90
  );
92
91
  opacity: 1;
93
92
  }
93
+ .item:last-of-type {
94
+ margin-bottom: 0;
95
+ }
94
96
 
95
97
  /* Override Mantine's native hover background to use our overlay technique */
96
98
  .item:hover {
97
99
  background-color: var(
98
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_background
100
+ --recursica_ui-kit_components_menu-item_variants_selection-states_unselected_properties_colors_background-color
99
101
  );
100
102
  }
101
103
 
102
- /* Hover overlay using ::after pseudo-element (same technique as Accordion) */
104
+ /* Hover overlay using ::after pseudo-element (same technique as Accordion); no per-item
105
+ hover-color/hover-opacity tokens exist anymore, so this uses the generic overlay tokens
106
+ uniformly regardless of selection state. */
103
107
  .item::after {
104
108
  content: "";
105
109
  position: absolute;
@@ -107,58 +111,46 @@
107
111
  border-radius: inherit;
108
112
  z-index: 0;
109
113
  pointer-events: none;
110
- background-color: var(
111
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_hover-color
112
- );
114
+ background-color: var(--recursica_brand_states_hover_color);
113
115
  opacity: 0;
114
116
  transition: opacity 150ms ease;
115
117
  }
116
118
 
117
119
  .item:hover:not([data-disabled])::after {
118
- opacity: var(
119
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_hover-opacity
120
- );
120
+ opacity: var(--recursica_brand_states_hover_opacity);
121
121
  }
122
122
 
123
123
  /* Selected item state */
124
124
  .item[data-selected] {
125
125
  background-color: var(
126
- --recursica_ui-kit_components_menu-item_properties_colors_selected-item_background
126
+ --recursica_ui-kit_components_menu-item_variants_selection-states_selected_properties_colors_background-color
127
127
  );
128
128
  color: var(
129
- --recursica_ui-kit_components_menu-item_properties_colors_selected-item_text
129
+ --recursica_ui-kit_components_menu-item_variants_selection-states_selected_properties_colors_text-color
130
130
  );
131
131
  opacity: 1;
132
132
  }
133
133
 
134
- .item[data-selected]::after {
135
- background-color: var(
136
- --recursica_ui-kit_components_menu-item_properties_colors_selected-item_hover-color
137
- );
138
- }
139
-
140
134
  /* Hovered item state (keyboard navigation) */
141
135
  .item[data-hovered] {
142
136
  background-color: var(
143
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_background
137
+ --recursica_ui-kit_components_menu-item_variants_selection-states_unselected_properties_colors_background-color
144
138
  );
145
139
  }
146
140
  .item[data-hovered]::after {
147
- opacity: var(
148
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_hover-opacity
149
- );
141
+ opacity: var(--recursica_brand_states_hover_opacity);
150
142
  }
151
143
 
152
- .item[data-hovered][data-selected]::after {
144
+ /* Disabled item (opacity differs depending on selection state) */
145
+ .item[data-disabled]:not([data-selected]) {
153
146
  opacity: var(
154
- --recursica_ui-kit_components_menu-item_properties_colors_selected-item_hover-opacity
147
+ --recursica_ui-kit_components_menu-item_variants_selection-states_unselected_variants_states_disabled_properties_opacity
155
148
  );
156
149
  }
157
150
 
158
- /* Disabled item */
159
- .item[data-disabled] {
151
+ .item[data-disabled][data-selected] {
160
152
  opacity: var(
161
- --recursica_ui-kit_components_menu-item_properties_disabled-opacity
153
+ --recursica_ui-kit_components_menu-item_variants_selection-states_selected_variants_states_disabled_properties_opacity
162
154
  );
163
155
  }
164
156
 
@@ -192,7 +184,7 @@
192
184
  --recursica_ui-kit_components_menu-item_properties_icon-text-gap
193
185
  );
194
186
  color: var(
195
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_leading-icon-color
187
+ --recursica_ui-kit_components_menu-item_variants_selection-states_unselected_properties_colors_leading-icon-color
196
188
  );
197
189
  }
198
190
 
@@ -205,19 +197,19 @@
205
197
  );
206
198
  margin-left: var(--recursica_ui-kit_components_menu-item_properties_text-gap);
207
199
  color: var(
208
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_trailing-icon-color
200
+ --recursica_ui-kit_components_menu-item_variants_selection-states_unselected_properties_colors_trailing-icon-color
209
201
  );
210
202
  }
211
203
 
212
204
  .item[data-selected] .itemSection[data-position="left"] {
213
205
  color: var(
214
- --recursica_ui-kit_components_menu-item_properties_colors_selected-item_leading-icon-color
206
+ --recursica_ui-kit_components_menu-item_variants_selection-states_selected_properties_colors_leading-icon-color
215
207
  );
216
208
  }
217
209
 
218
210
  .item[data-selected] .itemSection[data-position="right"] {
219
211
  color: var(
220
- --recursica_ui-kit_components_menu-item_properties_colors_selected-item_trailing-icon-color
212
+ --recursica_ui-kit_components_menu-item_variants_selection-states_selected_properties_colors_trailing-icon-color
221
213
  );
222
214
  }
223
215
 
@@ -271,7 +263,7 @@
271
263
  );
272
264
 
273
265
  color: var(
274
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_supporting-text-color
266
+ --recursica_ui-kit_components_menu-item_variants_selection-states_unselected_properties_colors_supporting-text-color
275
267
  );
276
268
  opacity: 0.7;
277
269
  }