@recursica/mantine-adapter 0.35.0 → 0.36.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 +26 -0
- package/SETUP.md +1 -1
- package/dist/mantine-adapter.cjs +2 -2
- package/dist/mantine-adapter.cjs.map +1 -1
- package/dist/mantine-adapter.css +1 -1
- package/dist/mantine-adapter.js +1385 -1300
- package/dist/mantine-adapter.js.map +1 -1
- package/dist/src/components/Tree/Tree.d.ts +9 -5
- package/dist/src/components/index.d.ts +1 -0
- package/dist/src/index.d.ts +1 -0
- package/llms.txt +2 -0
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.module.css +123 -62
- package/src/components/Accordion/Accordion.stories.tsx +65 -33
- package/src/components/Accordion/Accordion.tsx +1 -0
- package/src/components/AutoComplete/AutoComplete.module.css +50 -49
- package/src/components/AutoComplete/AutoComplete.tsx +2 -2
- package/src/components/Avatar/Avatar.module.css +7 -7
- package/src/components/Badge/Badge.module.css +8 -8
- package/src/components/Button/Button.module.css +22 -89
- package/src/components/Card/Card.module.css +3 -3
- package/src/components/Checkbox/Checkbox.module.css +54 -15
- package/src/components/Chip/Chip.module.css +27 -26
- package/src/components/DatePicker/DatePicker.module.css +25 -30
- package/src/components/Dropdown/Dropdown.module.css +47 -44
- package/src/components/Dropdown/Dropdown.tsx +2 -2
- package/src/components/FormControlWrapper/FormControlWrapper.module.css +12 -12
- package/src/components/HoverCard/HoverCard.module.css +1 -1
- package/src/components/Label/Label.module.css +7 -3
- package/src/components/Layer/USAGE.md +54 -0
- package/src/components/Link/IMPLEMENTATION_NOTES.md +2 -9
- package/src/components/Link/Link.module.css +15 -76
- package/src/components/Link/USAGE.md +2 -9
- package/src/components/Loader/Loader.module.css +3 -3
- package/src/components/Menu/Menu.module.css +34 -41
- package/src/components/Modal/Modal.module.css +27 -11
- package/src/components/NumberInput/NumberInput.module.css +39 -37
- package/src/components/NumberInput/NumberInput.tsx +2 -2
- package/src/components/Pagination/Pagination.module.css +10 -43
- package/src/components/Panel/Panel.module.css +3 -3
- package/src/components/Popover/Popover.module.css +1 -1
- package/src/components/Radio/Radio.module.css +31 -14
- package/src/components/ReadOnlyField/ReadOnlyField.module.css +1 -1
- package/src/components/RecursicaThemeProvider/USAGE.md +60 -0
- package/src/components/SegmentedControl/SegmentedControl.module.css +29 -29
- package/src/components/Slider/IMPLEMENTATION_NOTES.md +9 -0
- package/src/components/Slider/Slider.module.css +44 -48
- package/src/components/Stepper/Stepper.module.css +3 -3
- package/src/components/Switch/Switch.module.css +26 -10
- package/src/components/Table/Table.module.css +53 -21
- package/src/components/Tabs/Tabs.module.css +309 -170
- package/src/components/TextArea/TextArea.module.css +36 -21
- package/src/components/TextArea/TextArea.tsx +2 -2
- package/src/components/TextField/TextField.module.css +38 -35
- package/src/components/TextField/TextField.tsx +2 -2
- package/src/components/Timeline/Timeline.module.css +41 -34
- package/src/components/Toast/Toast.module.css +19 -11
- package/src/components/Tooltip/Tooltip.module.css +4 -2
- package/src/components/Tree/IMPLEMENTATION_NOTES.md +17 -0
- package/src/components/Tree/Tree.module.css +173 -39
- package/src/components/Tree/Tree.stories.tsx +81 -4
- package/src/components/Tree/Tree.tsx +117 -15
- package/src/components/Tree/USAGE.md +36 -3
- package/src/components/index.ts +1 -0
- package/src/index.ts +3 -0
|
@@ -1,23 +1,36 @@
|
|
|
1
1
|
/* EXEMPTIONS:
|
|
2
|
-
-
|
|
3
|
-
unexpected layout shift or flickering during
|
|
4
|
-
/* recursica-ignore: --recursica_ui-
|
|
2
|
+
- border-size variables are ignored because a uniform 1px border is applied globally to prevent
|
|
3
|
+
unexpected layout shift or flickering during focused, disabled, or error state transitions. */
|
|
4
|
+
/* recursica-ignore: --recursica_ui-kit_components_textarea_properties_border-size */
|
|
5
5
|
/* recursica-ignore: --recursica_ui-kit_components_textarea_variants_states_disabled_properties_border-size */
|
|
6
6
|
/* recursica-ignore: --recursica_ui-kit_components_textarea_variants_states_error_properties_border-size */
|
|
7
|
-
/* recursica-ignore: --recursica_ui-kit_components_textarea_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 --textarea-control-{max,min}-width hooks consumed inline in TextArea.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_textarea_variants_layouts_stacked_properties_top-bottom-margin
|
|
14
15
|
);
|
|
16
|
+
--textarea-control-max-width: var(
|
|
17
|
+
--recursica_ui-kit_components_textarea_variants_layouts_stacked_properties_max-width
|
|
18
|
+
);
|
|
19
|
+
--textarea-control-min-width: var(
|
|
20
|
+
--recursica_ui-kit_components_textarea_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_textarea_variants_layouts_side-by-side_properties_top-bottom-margin
|
|
20
27
|
);
|
|
28
|
+
--textarea-control-max-width: var(
|
|
29
|
+
--recursica_ui-kit_components_textarea_variants_layouts_side-by-side_properties_max-width
|
|
30
|
+
);
|
|
31
|
+
--textarea-control-min-width: var(
|
|
32
|
+
--recursica_ui-kit_components_textarea_variants_layouts_side-by-side_properties_min-width
|
|
33
|
+
);
|
|
21
34
|
}
|
|
22
35
|
|
|
23
36
|
/* HARDCODED VALUES:
|
|
@@ -95,13 +108,13 @@
|
|
|
95
108
|
|
|
96
109
|
/* Base State Default Execution */
|
|
97
110
|
background-color: var(
|
|
98
|
-
--recursica_ui-
|
|
111
|
+
--recursica_ui-kit_components_textarea_properties_colors_background-color
|
|
99
112
|
);
|
|
100
113
|
border-color: var(
|
|
101
|
-
--recursica_ui-
|
|
114
|
+
--recursica_ui-kit_components_textarea_properties_colors_border-color
|
|
102
115
|
);
|
|
103
116
|
color: var(
|
|
104
|
-
--recursica_ui-
|
|
117
|
+
--recursica_ui-kit_components_textarea_properties_colors_text-color
|
|
105
118
|
);
|
|
106
119
|
|
|
107
120
|
outline: none;
|
|
@@ -119,17 +132,16 @@
|
|
|
119
132
|
-------------------------------------- */
|
|
120
133
|
|
|
121
134
|
/* Focus State Mapping (Triggered internally via browser focus rules) */
|
|
135
|
+
/* The token schema no longer provides per-component focus colors; apply the generic focus ring
|
|
136
|
+
tokens as a box-shadow ring instead of a color swap. */
|
|
122
137
|
.input:focus-within,
|
|
123
138
|
.input:focus {
|
|
124
|
-
|
|
125
|
-
--
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
color: var(
|
|
131
|
-
--recursica_ui-kit_components_textarea_variants_states_focus_properties_colors_text
|
|
132
|
-
);
|
|
139
|
+
box-shadow:
|
|
140
|
+
0 0 0 var(--recursica_brand_states_focus_border-size)
|
|
141
|
+
var(--recursica_brand_states_focus_color),
|
|
142
|
+
0 0 var(--recursica_brand_states_focus_blur)
|
|
143
|
+
var(--recursica_brand_states_focus_margin)
|
|
144
|
+
var(--recursica_brand_states_focus_color);
|
|
133
145
|
}
|
|
134
146
|
|
|
135
147
|
/* Error State Mapping (Propagated strictly down from the wrapper DOM context) */
|
|
@@ -138,10 +150,10 @@
|
|
|
138
150
|
--recursica_ui-kit_components_textarea_variants_states_error_properties_colors_border-color
|
|
139
151
|
) !important;
|
|
140
152
|
background-color: var(
|
|
141
|
-
--recursica_ui-kit_components_textarea_variants_states_error_properties_colors_background
|
|
153
|
+
--recursica_ui-kit_components_textarea_variants_states_error_properties_colors_background-color
|
|
142
154
|
) !important;
|
|
143
155
|
color: var(
|
|
144
|
-
--recursica_ui-kit_components_textarea_variants_states_error_properties_colors_text
|
|
156
|
+
--recursica_ui-kit_components_textarea_variants_states_error_properties_colors_text-color
|
|
145
157
|
) !important;
|
|
146
158
|
}
|
|
147
159
|
|
|
@@ -151,10 +163,13 @@
|
|
|
151
163
|
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_colors_border-color
|
|
152
164
|
) !important;
|
|
153
165
|
background-color: var(
|
|
154
|
-
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_colors_background
|
|
166
|
+
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_colors_background-color
|
|
155
167
|
) !important;
|
|
156
168
|
color: var(
|
|
157
|
-
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_colors_text
|
|
169
|
+
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_colors_text-color
|
|
170
|
+
) !important;
|
|
171
|
+
opacity: var(
|
|
172
|
+
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_opacity
|
|
158
173
|
) !important;
|
|
159
174
|
cursor: not-allowed;
|
|
160
175
|
}
|
|
@@ -95,8 +95,8 @@ export const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
|
|
|
95
95
|
<WithReadOnlyWrapper
|
|
96
96
|
className={wrapperClass}
|
|
97
97
|
style={style as React.CSSProperties}
|
|
98
|
-
controlMaxWidth="var(--
|
|
99
|
-
controlMinWidth="var(--
|
|
98
|
+
controlMaxWidth="var(--textarea-control-max-width)"
|
|
99
|
+
controlMinWidth="var(--textarea-control-min-width)"
|
|
100
100
|
overStyled={overStyled as true}
|
|
101
101
|
formLayout={formLayout}
|
|
102
102
|
labelSize={labelSize}
|
|
@@ -1,23 +1,36 @@
|
|
|
1
1
|
/* EXEMPTIONS:
|
|
2
|
-
-
|
|
3
|
-
unexpected layout shift or flickering during
|
|
4
|
-
/* recursica-ignore: --recursica_ui-kit_components_text-
|
|
2
|
+
- border-size variables are ignored because a uniform 1px border is applied globally to prevent
|
|
3
|
+
unexpected layout shift or flickering during focused, disabled, or error state transitions. */
|
|
4
|
+
/* recursica-ignore: --recursica_ui-kit_components_text-field_properties_border-size */
|
|
5
5
|
/* recursica-ignore: --recursica_ui-kit_components_text-field_variants_states_disabled_properties_border-size */
|
|
6
6
|
/* recursica-ignore: --recursica_ui-kit_components_text-field_variants_states_error_properties_border-size */
|
|
7
|
-
/* recursica-ignore: --recursica_ui-kit_components_text-field_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 --text-field-control-{max,min}-width hooks consumed inline in TextField.tsx,
|
|
11
|
+
since 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_text-field_variants_layouts_stacked_properties_top-bottom-margin
|
|
14
15
|
);
|
|
16
|
+
--text-field-control-max-width: var(
|
|
17
|
+
--recursica_ui-kit_components_text-field_variants_layouts_stacked_properties_max-width
|
|
18
|
+
);
|
|
19
|
+
--text-field-control-min-width: var(
|
|
20
|
+
--recursica_ui-kit_components_text-field_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_text-field_variants_layouts_side-by-side_properties_top-bottom-margin
|
|
20
27
|
);
|
|
28
|
+
--text-field-control-max-width: var(
|
|
29
|
+
--recursica_ui-kit_components_text-field_variants_layouts_side-by-side_properties_max-width
|
|
30
|
+
);
|
|
31
|
+
--text-field-control-min-width: var(
|
|
32
|
+
--recursica_ui-kit_components_text-field_variants_layouts_side-by-side_properties_min-width
|
|
33
|
+
);
|
|
21
34
|
}
|
|
22
35
|
|
|
23
36
|
/* HARDCODED VALUES:
|
|
@@ -108,13 +121,13 @@
|
|
|
108
121
|
|
|
109
122
|
/* Base State Default Execution */
|
|
110
123
|
background-color: var(
|
|
111
|
-
--recursica_ui-kit_components_text-
|
|
124
|
+
--recursica_ui-kit_components_text-field_properties_colors_background-color
|
|
112
125
|
);
|
|
113
126
|
border-color: var(
|
|
114
|
-
--recursica_ui-kit_components_text-
|
|
127
|
+
--recursica_ui-kit_components_text-field_properties_colors_border-color
|
|
115
128
|
);
|
|
116
129
|
color: var(
|
|
117
|
-
--recursica_ui-kit_components_text-
|
|
130
|
+
--recursica_ui-kit_components_text-field_properties_colors_text-color
|
|
118
131
|
);
|
|
119
132
|
|
|
120
133
|
outline: none;
|
|
@@ -161,13 +174,13 @@
|
|
|
161
174
|
width: var(--recursica_ui-kit_components_text-field_properties_icon-size);
|
|
162
175
|
height: var(--recursica_ui-kit_components_text-field_properties_icon-size);
|
|
163
176
|
color: var(
|
|
164
|
-
--recursica_ui-kit_components_text-
|
|
177
|
+
--recursica_ui-kit_components_text-field_properties_colors_leading-icon
|
|
165
178
|
);
|
|
166
179
|
}
|
|
167
180
|
|
|
168
181
|
.section[data-position="right"] :global(svg) {
|
|
169
182
|
color: var(
|
|
170
|
-
--recursica_ui-kit_components_text-
|
|
183
|
+
--recursica_ui-kit_components_text-field_properties_colors_trailing-icon
|
|
171
184
|
);
|
|
172
185
|
}
|
|
173
186
|
|
|
@@ -176,29 +189,16 @@
|
|
|
176
189
|
-------------------------------------- */
|
|
177
190
|
|
|
178
191
|
/* Focus State Mapping (Triggered internally via browser pseudo-pseudo-class) */
|
|
192
|
+
/* The token schema no longer provides per-component focus colors; apply the generic focus ring
|
|
193
|
+
tokens as a box-shadow ring instead of a color swap. */
|
|
179
194
|
.input:focus-within,
|
|
180
195
|
.input:focus {
|
|
181
|
-
|
|
182
|
-
--
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
color: var(
|
|
188
|
-
--recursica_ui-kit_components_text-field_variants_states_focus_properties_colors_text
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
.root:focus-within .section[data-position="left"] :global(svg) {
|
|
193
|
-
color: var(
|
|
194
|
-
--recursica_ui-kit_components_text-field_variants_states_focus_properties_colors_leading-icon
|
|
195
|
-
);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
.root:focus-within .section[data-position="right"] :global(svg) {
|
|
199
|
-
color: var(
|
|
200
|
-
--recursica_ui-kit_components_text-field_variants_states_focus_properties_colors_trailing-icon
|
|
201
|
-
);
|
|
196
|
+
box-shadow:
|
|
197
|
+
0 0 0 var(--recursica_brand_states_focus_border-size)
|
|
198
|
+
var(--recursica_brand_states_focus_color),
|
|
199
|
+
0 0 var(--recursica_brand_states_focus_blur)
|
|
200
|
+
var(--recursica_brand_states_focus_margin)
|
|
201
|
+
var(--recursica_brand_states_focus_color);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
/* Error State Mapping (Propagated strictly down from the wrapper DOM context) */
|
|
@@ -207,10 +207,10 @@
|
|
|
207
207
|
--recursica_ui-kit_components_text-field_variants_states_error_properties_colors_border-color
|
|
208
208
|
) !important;
|
|
209
209
|
background-color: var(
|
|
210
|
-
--recursica_ui-kit_components_text-field_variants_states_error_properties_colors_background
|
|
210
|
+
--recursica_ui-kit_components_text-field_variants_states_error_properties_colors_background-color
|
|
211
211
|
) !important;
|
|
212
212
|
color: var(
|
|
213
|
-
--recursica_ui-kit_components_text-field_variants_states_error_properties_colors_text
|
|
213
|
+
--recursica_ui-kit_components_text-field_variants_states_error_properties_colors_text-color
|
|
214
214
|
) !important;
|
|
215
215
|
}
|
|
216
216
|
|
|
@@ -232,10 +232,13 @@
|
|
|
232
232
|
--recursica_ui-kit_components_text-field_variants_states_disabled_properties_colors_border-color
|
|
233
233
|
) !important;
|
|
234
234
|
background-color: var(
|
|
235
|
-
--recursica_ui-kit_components_text-field_variants_states_disabled_properties_colors_background
|
|
235
|
+
--recursica_ui-kit_components_text-field_variants_states_disabled_properties_colors_background-color
|
|
236
236
|
) !important;
|
|
237
237
|
color: var(
|
|
238
|
-
--recursica_ui-kit_components_text-field_variants_states_disabled_properties_colors_text
|
|
238
|
+
--recursica_ui-kit_components_text-field_variants_states_disabled_properties_colors_text-color
|
|
239
|
+
) !important;
|
|
240
|
+
opacity: var(
|
|
241
|
+
--recursica_ui-kit_components_text-field_variants_states_disabled_properties_opacity
|
|
239
242
|
) !important;
|
|
240
243
|
cursor: not-allowed;
|
|
241
244
|
}
|
|
@@ -101,8 +101,8 @@ export const TextField = forwardRef<HTMLInputElement, TextFieldProps>(
|
|
|
101
101
|
<WithReadOnlyWrapper
|
|
102
102
|
className={wrapperClass}
|
|
103
103
|
style={style as React.CSSProperties}
|
|
104
|
-
controlMaxWidth="var(--
|
|
105
|
-
controlMinWidth="var(--
|
|
104
|
+
controlMaxWidth="var(--text-field-control-max-width)"
|
|
105
|
+
controlMinWidth="var(--text-field-control-min-width)"
|
|
106
106
|
overStyled={overStyled as true}
|
|
107
107
|
formLayout={formLayout}
|
|
108
108
|
labelSize={labelSize}
|
|
@@ -7,17 +7,24 @@
|
|
|
7
7
|
.root {
|
|
8
8
|
display: flex;
|
|
9
9
|
flex-direction: column;
|
|
10
|
+
/* Mantine drives item spacing (.item's margin-top) AND the connector line's bridging offset
|
|
11
|
+
(.item::before's negative bottom) off the SAME --mantine-spacing-xl variable. Overriding it
|
|
12
|
+
here (rather than adding a flex gap) keeps both in sync automatically instead of introducing
|
|
13
|
+
a visible break in the connector line. */
|
|
14
|
+
--mantine-spacing-xl: var(
|
|
15
|
+
--recursica_ui-kit_components_timeline_properties_item-gap
|
|
16
|
+
);
|
|
10
17
|
}
|
|
11
18
|
|
|
12
19
|
.item {
|
|
13
20
|
/* Mantine uses these vars to calculate the exact left: position of the connector line */
|
|
14
21
|
--tl-line-width: var(
|
|
15
|
-
--recursica_ui-
|
|
22
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_inactive_properties_connector-size
|
|
16
23
|
) !important;
|
|
17
24
|
|
|
18
25
|
&[data-active] {
|
|
19
26
|
--tl-line-width: var(
|
|
20
|
-
--recursica_ui-
|
|
27
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_active_properties_connector-size
|
|
21
28
|
) !important;
|
|
22
29
|
}
|
|
23
30
|
|
|
@@ -47,20 +54,20 @@
|
|
|
47
54
|
/* Inactive connector */
|
|
48
55
|
&::before {
|
|
49
56
|
border-left-width: var(
|
|
50
|
-
--recursica_ui-
|
|
57
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_inactive_properties_connector-size
|
|
51
58
|
) !important;
|
|
52
59
|
border-left-color: var(
|
|
53
|
-
--recursica_ui-
|
|
60
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_inactive_properties_colors_connector-color
|
|
54
61
|
) !important;
|
|
55
62
|
}
|
|
56
63
|
|
|
57
64
|
/* Active connector */
|
|
58
65
|
&[data-active]::before {
|
|
59
66
|
border-left-width: var(
|
|
60
|
-
--recursica_ui-
|
|
67
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_active_properties_connector-size
|
|
61
68
|
) !important;
|
|
62
69
|
border-left-color: var(
|
|
63
|
-
--recursica_ui-
|
|
70
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_active_properties_colors_connector-color
|
|
64
71
|
) !important;
|
|
65
72
|
}
|
|
66
73
|
}
|
|
@@ -89,18 +96,18 @@
|
|
|
89
96
|
) !important;
|
|
90
97
|
|
|
91
98
|
background-color: var(
|
|
92
|
-
--recursica_ui-kit_components_timeline-
|
|
99
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_default_variants_selection-states_inactive_properties_colors_background-color
|
|
93
100
|
) !important;
|
|
94
101
|
border-color: var(
|
|
95
|
-
--recursica_ui-kit_components_timeline-
|
|
102
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_default_variants_selection-states_inactive_properties_colors_border-color
|
|
96
103
|
) !important;
|
|
97
104
|
}
|
|
98
105
|
:global(.mantine-Timeline-item)[data-variant="default"][data-active] & {
|
|
99
106
|
background-color: var(
|
|
100
|
-
--recursica_ui-kit_components_timeline-
|
|
107
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_default_variants_selection-states_active_properties_colors_background-color
|
|
101
108
|
) !important;
|
|
102
109
|
border-color: var(
|
|
103
|
-
--recursica_ui-kit_components_timeline-
|
|
110
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_default_variants_selection-states_active_properties_colors_border-color
|
|
104
111
|
) !important;
|
|
105
112
|
}
|
|
106
113
|
|
|
@@ -120,13 +127,13 @@
|
|
|
120
127
|
) !important;
|
|
121
128
|
|
|
122
129
|
background-color: var(
|
|
123
|
-
--recursica_ui-kit_components_timeline-
|
|
130
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon_variants_selection-states_inactive_properties_colors_background-color
|
|
124
131
|
) !important;
|
|
125
132
|
border-color: var(
|
|
126
|
-
--recursica_ui-kit_components_timeline-
|
|
133
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon_variants_selection-states_inactive_properties_colors_border-color
|
|
127
134
|
) !important;
|
|
128
135
|
color: var(
|
|
129
|
-
--recursica_ui-kit_components_timeline-
|
|
136
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon_variants_selection-states_inactive_properties_colors_icon-color
|
|
130
137
|
) !important;
|
|
131
138
|
|
|
132
139
|
/* Propagate icon size */
|
|
@@ -144,13 +151,13 @@
|
|
|
144
151
|
}
|
|
145
152
|
:global(.mantine-Timeline-item)[data-variant="icon"][data-active] & {
|
|
146
153
|
background-color: var(
|
|
147
|
-
--recursica_ui-kit_components_timeline-
|
|
154
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon_variants_selection-states_active_properties_colors_background-color
|
|
148
155
|
) !important;
|
|
149
156
|
border-color: var(
|
|
150
|
-
--recursica_ui-kit_components_timeline-
|
|
157
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon_variants_selection-states_active_properties_colors_border-color
|
|
151
158
|
) !important;
|
|
152
159
|
color: var(
|
|
153
|
-
--recursica_ui-kit_components_timeline-
|
|
160
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon_variants_selection-states_active_properties_colors_icon-color
|
|
154
161
|
) !important;
|
|
155
162
|
}
|
|
156
163
|
|
|
@@ -170,13 +177,13 @@
|
|
|
170
177
|
) !important;
|
|
171
178
|
|
|
172
179
|
background-color: var(
|
|
173
|
-
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-
|
|
180
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-alternative_variants_selection-states_inactive_properties_colors_background-color
|
|
174
181
|
) !important;
|
|
175
182
|
border-color: var(
|
|
176
|
-
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-
|
|
183
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-alternative_variants_selection-states_inactive_properties_colors_border-color
|
|
177
184
|
) !important;
|
|
178
185
|
color: var(
|
|
179
|
-
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-
|
|
186
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-alternative_variants_selection-states_inactive_properties_colors_icon-color
|
|
180
187
|
) !important;
|
|
181
188
|
|
|
182
189
|
font-size: var(
|
|
@@ -194,13 +201,13 @@
|
|
|
194
201
|
:global(.mantine-Timeline-item)[data-variant="icon-alternative"][data-active]
|
|
195
202
|
& {
|
|
196
203
|
background-color: var(
|
|
197
|
-
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-
|
|
204
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-alternative_variants_selection-states_active_properties_colors_background-color
|
|
198
205
|
) !important;
|
|
199
206
|
border-color: var(
|
|
200
|
-
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-
|
|
207
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-alternative_variants_selection-states_active_properties_colors_border-color
|
|
201
208
|
) !important;
|
|
202
209
|
color: var(
|
|
203
|
-
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-
|
|
210
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_icon-alternative_variants_selection-states_active_properties_colors_icon-color
|
|
204
211
|
) !important;
|
|
205
212
|
}
|
|
206
213
|
|
|
@@ -214,25 +221,25 @@
|
|
|
214
221
|
--recursica_ui-kit_components_timeline-bullet_variants_types_avatar_properties_border-size
|
|
215
222
|
) !important;
|
|
216
223
|
opacity: var(
|
|
217
|
-
--recursica_ui-kit_components_timeline-
|
|
224
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_avatar_variants_selection-states_inactive_properties_avatar-opacity
|
|
218
225
|
) !important;
|
|
219
226
|
|
|
220
227
|
background-color: var(
|
|
221
|
-
--recursica_ui-kit_components_timeline-
|
|
228
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_avatar_variants_selection-states_inactive_properties_colors_background-color
|
|
222
229
|
) !important;
|
|
223
230
|
border-color: var(
|
|
224
|
-
--recursica_ui-kit_components_timeline-
|
|
231
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_avatar_variants_selection-states_inactive_properties_colors_border-color
|
|
225
232
|
) !important;
|
|
226
233
|
}
|
|
227
234
|
:global(.mantine-Timeline-item)[data-variant="avatar"][data-active] & {
|
|
228
235
|
opacity: var(
|
|
229
|
-
--recursica_ui-kit_components_timeline-
|
|
236
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_avatar_variants_selection-states_active_properties_avatar-opacity
|
|
230
237
|
) !important;
|
|
231
238
|
background-color: var(
|
|
232
|
-
--recursica_ui-kit_components_timeline-
|
|
239
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_avatar_variants_selection-states_active_properties_colors_background-color
|
|
233
240
|
) !important;
|
|
234
241
|
border-color: var(
|
|
235
|
-
--recursica_ui-kit_components_timeline-
|
|
242
|
+
--recursica_ui-kit_components_timeline-bullet_variants_types_avatar_variants_selection-states_active_properties_colors_border-color
|
|
236
243
|
) !important;
|
|
237
244
|
}
|
|
238
245
|
}
|
|
@@ -270,13 +277,13 @@
|
|
|
270
277
|
|
|
271
278
|
/* Inactive Title Color */
|
|
272
279
|
color: var(
|
|
273
|
-
--recursica_ui-
|
|
280
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_inactive_properties_colors_title-color
|
|
274
281
|
) !important;
|
|
275
282
|
|
|
276
283
|
/* Active Title Color */
|
|
277
284
|
:global(.mantine-Timeline-item)[data-active] & {
|
|
278
285
|
color: var(
|
|
279
|
-
--recursica_ui-
|
|
286
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_active_properties_colors_title-color
|
|
280
287
|
) !important;
|
|
281
288
|
}
|
|
282
289
|
}
|
|
@@ -319,12 +326,12 @@
|
|
|
319
326
|
);
|
|
320
327
|
|
|
321
328
|
color: var(
|
|
322
|
-
--recursica_ui-
|
|
329
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_inactive_properties_colors_description-color
|
|
323
330
|
);
|
|
324
331
|
|
|
325
332
|
:global(.mantine-Timeline-item)[data-active] & {
|
|
326
333
|
color: var(
|
|
327
|
-
--recursica_ui-
|
|
334
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_active_properties_colors_description-color
|
|
328
335
|
);
|
|
329
336
|
}
|
|
330
337
|
}
|
|
@@ -356,12 +363,12 @@
|
|
|
356
363
|
);
|
|
357
364
|
|
|
358
365
|
color: var(
|
|
359
|
-
--recursica_ui-
|
|
366
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_inactive_properties_colors_timestamp-color
|
|
360
367
|
);
|
|
361
368
|
|
|
362
369
|
:global(.mantine-Timeline-item)[data-active] & {
|
|
363
370
|
color: var(
|
|
364
|
-
--recursica_ui-
|
|
371
|
+
--recursica_ui-kit_components_timeline_variants_selection-states_active_properties_colors_timestamp-color
|
|
365
372
|
);
|
|
366
373
|
}
|
|
367
374
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
/* recursica-ignore: --recursica_ui-kit_components_toast_properties_elevation_layer-3 */
|
|
7
7
|
|
|
8
8
|
/* HARDCODED VALUES:
|
|
9
|
-
- border-style:
|
|
9
|
+
- border-style: solid. Baseline so the per-variant border-color tokens actually render.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
/* ======================================
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
);
|
|
20
20
|
border-width: var(--recursica_ui-kit_components_toast_properties_border-size);
|
|
21
21
|
border-style: solid;
|
|
22
|
-
border-color:
|
|
22
|
+
border-color: var(
|
|
23
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_border-color
|
|
24
|
+
);
|
|
23
25
|
box-shadow: var(
|
|
24
26
|
--recursica_ui-kit_components_toast_properties_elevation_layer-0
|
|
25
27
|
);
|
|
@@ -31,7 +33,7 @@
|
|
|
31
33
|
|
|
32
34
|
/* Default Variant (Base) */
|
|
33
35
|
background-color: var(
|
|
34
|
-
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_background
|
|
36
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_background-color
|
|
35
37
|
);
|
|
36
38
|
gap: var(--recursica_ui-kit_components_toast_properties_spacing);
|
|
37
39
|
|
|
@@ -48,7 +50,7 @@
|
|
|
48
50
|
background-color: transparent !important; /* Remove Mantine's native circle background */
|
|
49
51
|
|
|
50
52
|
color: var(
|
|
51
|
-
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_text
|
|
53
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_text-color
|
|
52
54
|
);
|
|
53
55
|
}
|
|
54
56
|
|
|
@@ -58,7 +60,7 @@
|
|
|
58
60
|
& .title,
|
|
59
61
|
& .description {
|
|
60
62
|
color: var(
|
|
61
|
-
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_text
|
|
63
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_text-color
|
|
62
64
|
);
|
|
63
65
|
}
|
|
64
66
|
& .closeButton {
|
|
@@ -70,18 +72,21 @@
|
|
|
70
72
|
/* Error Variant styling */
|
|
71
73
|
&[data-variant="error"] {
|
|
72
74
|
background-color: var(
|
|
73
|
-
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_background
|
|
75
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_background-color
|
|
76
|
+
);
|
|
77
|
+
border-color: var(
|
|
78
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_border-color
|
|
74
79
|
);
|
|
75
80
|
|
|
76
81
|
& .icon {
|
|
77
82
|
color: var(
|
|
78
|
-
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_text
|
|
83
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_text-color
|
|
79
84
|
) !important;
|
|
80
85
|
}
|
|
81
86
|
& .title,
|
|
82
87
|
& .description {
|
|
83
88
|
color: var(
|
|
84
|
-
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_text
|
|
89
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_text-color
|
|
85
90
|
);
|
|
86
91
|
}
|
|
87
92
|
& .closeButton {
|
|
@@ -94,18 +99,21 @@
|
|
|
94
99
|
/* Success Variant styling */
|
|
95
100
|
&[data-variant="success"] {
|
|
96
101
|
background-color: var(
|
|
97
|
-
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_background
|
|
102
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_background-color
|
|
103
|
+
);
|
|
104
|
+
border-color: var(
|
|
105
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_border-color
|
|
98
106
|
);
|
|
99
107
|
|
|
100
108
|
& .icon {
|
|
101
109
|
color: var(
|
|
102
|
-
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_text
|
|
110
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_text-color
|
|
103
111
|
) !important;
|
|
104
112
|
}
|
|
105
113
|
& .title,
|
|
106
114
|
& .description {
|
|
107
115
|
color: var(
|
|
108
|
-
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_text
|
|
116
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_text-color
|
|
109
117
|
);
|
|
110
118
|
}
|
|
111
119
|
& .closeButton {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
.tooltip {
|
|
25
25
|
background-color: var(
|
|
26
|
-
--recursica_ui-kit_components_tooltip_properties_colors_background
|
|
26
|
+
--recursica_ui-kit_components_tooltip_properties_colors_background-color
|
|
27
27
|
);
|
|
28
28
|
border-style: solid; /* HARDCODE: Mantine Box does not set border-style natively */
|
|
29
29
|
border-width: var(
|
|
@@ -76,7 +76,9 @@
|
|
|
76
76
|
--recursica_ui-kit_components_tooltip_properties_text_text-transform
|
|
77
77
|
);
|
|
78
78
|
|
|
79
|
-
color: var(
|
|
79
|
+
color: var(
|
|
80
|
+
--recursica_ui-kit_components_tooltip_properties_colors_text-color
|
|
81
|
+
);
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
/* ======================================
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Tree Implementation Notes
|
|
2
|
+
|
|
3
|
+
- **Fully custom `renderNode`, not Mantine's default row markup.** Mantine's `Tree` renders each node as `<li {...getStyles("node")}>{renderNode ? renderNode(payload) : <div {...elementProps}>{node.label}</div>}{subtree}</li>`. We always pass a custom `renderNode` (never rely on the fallback) so every visual property — box model, colors, typography, the expand chevron — is fully token-driven rather than inheriting Mantine's own `Tree.module.css` defaults (which include Mantine's own light/dark `[data-selected]` background using its own gray palette).
|
|
4
|
+
|
|
5
|
+
- **`elementProps` already carries the important behavioral wiring.** Mantine's `renderNode` payload includes an `elementProps` object with `onClick` (combined expand+select handler, respecting `expandOnClick`/`selectOnClick`), `data-selected`, `data-value`, and `data-hovered` (set on keyboard/mouse hover via Mantine's internal `hoveredNode` state). We spread these directly onto our own `.row` div rather than reimplementing click/keyboard behavior — only the `className` is overridden with our own token-driven class.
|
|
6
|
+
|
|
7
|
+
- **The chevron is a decorative element inside the same clickable row, not a separate `<button>`.** The design tokens include a `button-node-gap` token (implying a "button" next to the node label in Figma), but structurally the whole row is already the click target via `elementProps.onClick` (which correctly bundles Mantine's `expandOnClick`/`selectOnClick` logic). Making the chevron its own nested interactive `<button>` inside an `<li>` that Mantine already treats as keyboard-focusable (`tabIndex`, arrow-key handling in `TreeNode.tsx`) would create nested-focusable-element accessibility problems for no real benefit. `button-node-gap` is used as the CSS `gap` between the (decorative) chevron and the label inside `.row` instead.
|
|
8
|
+
|
|
9
|
+
- **No dedicated icon-color/icon-size token exists for Tree.** The expand chevron is an inline SVG using `stroke="currentColor"`, sized at `1em` (relative to the row's own tokened `font-size`). This means it automatically tracks whichever text-color token (selected/unselected) is active on `.row` — no new token was invented, and no hardcoded color was used.
|
|
10
|
+
|
|
11
|
+
- **KNOWN GAP (2026-08-06): Forge's own preview shows a red chevron with more chevron-to-label spacing than what's currently implemented here.** Re-verified against both the compiled `recursica_variables_scoped.css` and the raw `recursica_ui-kit.json` (synced the same day) — the `tree` schema genuinely has no `icon-color` property anywhere (only `background-color`/`border-color`/`text-color` per selection state, and neither references any red/`core-colors.alert` palette), and `button-node-gap` resolves to `brand.dimensions.general.sm` = 4px, which is exactly what `.row`'s `gap` uses. This was confirmed _not_ to be a mapping bug on our side. Most likely explanation: the chevron in the Figma source isn't bound to a variable at all (Forge previews commonly flag unbound properties in a warning color), and/or its real icon asset has different intrinsic spacing than our hand-drawn placeholder glyph. Needs a Forge/design follow-up — a bound icon-color variable and a confirmed intended gap value — before this can be fixed with a real token rather than a hardcoded guess.
|
|
12
|
+
|
|
13
|
+
- **`--level-offset` override needs `!important`.** Mantine's `Tree` computes each node's indent via a `--level-offset` CSS variable, resolved internally through its `createVarsResolver` mechanism and applied as a scoped rule on the root `<ul>` (same category of override as `Timeline`'s `--mantine-spacing-xl` / `--tl-line-width`). We override it on `.root` with `!important` to reliably beat Mantine's own generated rule regardless of stylesheet insertion order, rather than passing a `levelOffset` prop from TSX (which would mean setting a design-token value from TSX, against `COMPONENT_DEV_GUIDE.md`'s "no custom properties set from TSX for styling" rule).
|
|
14
|
+
|
|
15
|
+
- **`onSelectedChange` is a Recursica addition, not a Mantine API.** Mantine's `useTree()` controller tracks `selectedState` but has no change callback of its own. We watch `tree.selectedState` with a `useEffect` and fire `onSelectedChange` when it changes. This is a behavioral callback, not a design-token reactivity concern, so it doesn't conflict with `COMPONENT_DEV_GUIDE.md §7`'s rule against using `useEffect` for token/styling reactivity.
|
|
16
|
+
|
|
17
|
+
- **Deliberately not implemented (no tokens back them):** checkbox/indeterminate node state (Mantine's `Tree` supports `checkNode`/`isNodeIndeterminate`, but the Figma UI Kit's `tree` tokens only define `selected`/`unselected`, not a checked state) and per-node `disabled` (no token, and no `disabled` field in Mantine's `TreeNodeData` either). If either is needed later, it needs a token/schema addition first, not a component-level workaround.
|