@recursica/mantine-adapter 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/mantine-adapter.cjs +1 -1
  3. package/dist/mantine-adapter.cjs.map +1 -1
  4. package/dist/mantine-adapter.css +1 -1
  5. package/dist/mantine-adapter.js +1624 -1498
  6. package/dist/mantine-adapter.js.map +1 -1
  7. package/dist/src/components/AutoComplete/AutoComplete.d.ts +9 -0
  8. package/dist/src/components/Avatar/Avatar.d.ts +1 -1
  9. package/dist/src/components/Badge/Badge.d.ts +1 -1
  10. package/dist/src/components/Button/Button.d.ts +11 -1
  11. package/dist/src/components/Card/Card.d.ts +1 -1
  12. package/dist/src/components/Flex/Flex.d.ts +1 -1
  13. package/dist/src/components/Link/Link.d.ts +1 -1
  14. package/dist/src/components/SegmentedControl/SegmentedControl.d.ts +6 -1
  15. package/dist/src/components/Text/Text.d.ts +1 -1
  16. package/dist/src/components/Toast/Toast.d.ts +1 -1
  17. package/dist/src/components/index.d.ts +1 -0
  18. package/package.json +5 -2
  19. package/src/GlobalExemptions.modules.css +13 -0
  20. package/src/components/AutoComplete/AUTOCOMPLETE_IMPLEMENTATION_NOTES.md +21 -0
  21. package/src/components/AutoComplete/AutoComplete.module.css +311 -0
  22. package/src/components/AutoComplete/AutoComplete.stories.tsx +187 -0
  23. package/src/components/AutoComplete/AutoComplete.tsx +154 -0
  24. package/src/components/Avatar/Avatar.module.css +40 -36
  25. package/src/components/Badge/Badge.module.css +4 -1
  26. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -10
  27. package/src/components/Button/Button.module.css +220 -57
  28. package/src/components/Button/Button.stories.tsx +68 -0
  29. package/src/components/Button/Button.tsx +42 -3
  30. package/src/components/Button/IMPLEMENTATION_NOTES.md +16 -0
  31. package/src/components/Card/Card.module.css +58 -1
  32. package/src/components/Card/Card.stories.tsx +4 -2
  33. package/src/components/Checkbox/Checkbox.module.css +74 -46
  34. package/src/components/Checkbox/Checkbox.stories.tsx +3 -0
  35. package/src/components/Checkbox/CheckboxGroup.tsx +1 -9
  36. package/src/components/Chip/Chip.module.css +19 -1
  37. package/src/components/DatePicker/DatePicker.module.css +45 -0
  38. package/src/components/Dropdown/Dropdown.module.css +42 -15
  39. package/src/components/Dropdown/Dropdown.stories.tsx +3 -0
  40. package/src/components/Dropdown/Dropdown.tsx +5 -1
  41. package/src/components/FileInput/FileInput.module.css +50 -0
  42. package/src/components/FileUpload/FileUpload.module.css +43 -0
  43. package/src/components/FormControlLayout/FormControlLayout.module.css +12 -2
  44. package/src/components/FormControlWrapper/FormControlWrapper.module.css +66 -0
  45. package/src/components/HoverCard/HoverCard.module.css +12 -5
  46. package/src/components/Label/Label.module.css +11 -3
  47. package/src/components/Link/Link.module.css +8 -0
  48. package/src/components/Menu/Menu.module.css +73 -30
  49. package/src/components/Modal/Modal.module.css +92 -47
  50. package/src/components/NumberInput/NumberInput.module.css +46 -15
  51. package/src/components/NumberInput/NumberInput.tsx +5 -1
  52. package/src/components/Pagination/Pagination.module.css +123 -41
  53. package/src/components/Panel/Panel.module.css +55 -3
  54. package/src/components/Popover/Popover.module.css +6 -4
  55. package/src/components/Radio/Radio.module.css +72 -59
  56. package/src/components/Radio/Radio.stories.tsx +3 -0
  57. package/src/components/Radio/RadioGroup.tsx +1 -8
  58. package/src/components/ReadOnlyField/ReadOnlyField.module.css +14 -0
  59. package/src/components/ReadOnlyField/ReadOnlyField.tsx +16 -1
  60. package/src/components/SegmentedControl/SegmentedControl.module.css +106 -41
  61. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +1 -4
  62. package/src/components/SegmentedControl/SegmentedControl.tsx +18 -4
  63. package/src/components/Slider/Slider.module.css +89 -0
  64. package/src/components/Stepper/Stepper.module.css +53 -2
  65. package/src/components/Switch/Switch.module.css +62 -23
  66. package/src/components/Switch/Switch.stories.tsx +3 -0
  67. package/src/components/Switch/Switch.tsx +1 -0
  68. package/src/components/Switch/SwitchGroup.tsx +3 -10
  69. package/src/components/Tabs/Tabs.module.css +33 -12
  70. package/src/components/TextArea/TextArea.module.css +58 -120
  71. package/src/components/TextArea/TextArea.stories.tsx +3 -0
  72. package/src/components/TextArea/TextArea.tsx +7 -3
  73. package/src/components/TextField/TextField.module.css +46 -15
  74. package/src/components/TextField/TextField.tsx +5 -1
  75. package/src/components/TimePicker/TimePicker.module.css +44 -0
  76. package/src/components/Timeline/Timeline.module.css +6 -0
  77. package/src/components/Toast/Toast.module.css +62 -1
  78. package/src/components/Toast/Toast.tsx +1 -1
  79. package/src/components/Tooltip/Tooltip.module.css +9 -0
  80. package/src/components/TransferList/TransferList.module.css +41 -0
  81. package/src/components/index.ts +1 -0
@@ -6,7 +6,12 @@
6
6
  the Recursica beak-size token (16px). See COMPONENT_ISSUES.md for details.
7
7
  - All structural layout (display, position, overflow) is deferred to Mantine's native
8
8
  behavior. We only override visual design tokens (colors, typography, spacing, borders).
9
- */
9
+ /* EXEMPTIONS:
10
+ - beak-size is ignored here because Mantine's popover arrows compute their sizing and positional offsets
11
+ dynamically within the React rendering engine (requires inline pixel number rather than standard CSS variables).
12
+ The beak size is checked in JS against a fixed value of 16px. If this variable changes, the TSX components
13
+ need to be reviewed/re-compiled. */
14
+ /* recursica-ignore: --recursica_ui-kit_components_hover-card-popover_properties_beak-size = 16px */
10
15
 
11
16
  /* ======================================
12
17
  DROPDOWN CONTAINER
@@ -14,14 +19,14 @@
14
19
 
15
20
  .dropdown {
16
21
  background-color: var(
17
- --recursica_ui-kit_components_hover-card-popover_colors_background
22
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_background
18
23
  );
19
24
  border-style: solid; /* HARDCODE: Mantine Paper does not set border-style natively */
20
25
  border-width: var(
21
26
  --recursica_ui-kit_components_hover-card-popover_properties_border-size
22
27
  );
23
28
  border-color: var(
24
- --recursica_ui-kit_components_hover-card-popover_colors_border-color
29
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_border-color
25
30
  );
26
31
  border-radius: var(
27
32
  --recursica_ui-kit_components_hover-card-popover_properties_border-radius
@@ -70,7 +75,9 @@
70
75
  --recursica_ui-kit_components_hover-card-popover_properties_content-text_text-transform
71
76
  );
72
77
 
73
- color: var(--recursica_ui-kit_components_hover-card-popover_colors_content);
78
+ color: var(
79
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_content
80
+ );
74
81
  }
75
82
 
76
83
  /* ======================================
@@ -79,6 +86,6 @@
79
86
 
80
87
  .arrow {
81
88
  border-color: var(
82
- --recursica_ui-kit_components_hover-card-popover_colors_border-color
89
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_border-color
83
90
  );
84
91
  }
@@ -1,8 +1,14 @@
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. */
4
+
1
5
  /* HARDCODED VALUES:
2
6
  - display: flex helps us leverage flex 'order' to perfectly position Mantine's injected asterisk.
3
7
  - align-items: baseline ensures text logic lines up nicely if font sizes differ slightly.
4
8
  - margin/padding resets.
5
- */
9
+ */
10
+ /* recursica-ignore: --recursica_ui-kit_components_label_variants_layouts_stacked_variants_sizes_default_properties_width */
11
+ /* recursica-ignore: --recursica_ui-kit_components_label_variants_layouts_stacked_variants_sizes_small_properties_width */
6
12
 
7
13
  .root {
8
14
  display: flex;
@@ -95,7 +101,9 @@
95
101
  line-height: var(
96
102
  --recursica_ui-kit_components_label_properties_optional-text_line-height
97
103
  );
98
- font-style: normal;
104
+ font-style: var(
105
+ --recursica_ui-kit_components_label_properties_optional-text_font-style
106
+ );
99
107
  text-decoration: var(
100
108
  --recursica_ui-kit_components_label_properties_optional-text_text-decoration,
101
109
  none
@@ -106,7 +114,7 @@
106
114
  );
107
115
  color: inherit;
108
116
  opacity: var(
109
- --recursica_ui-kit_components_label_properties_colors_optional-text-opacity
117
+ --recursica_ui-kit_components_label_properties_optional-text-opacity
110
118
  );
111
119
  }
112
120
 
@@ -1,3 +1,11 @@
1
+ /* EXEMPTIONS:
2
+ - text_text-transform across multiple link states (default, hover, visited, visited-hover) is ignored
3
+ because links naturally inherit casing directly from text children rather than requiring custom CSS transforms. */
4
+ /* recursica-ignore: --recursica_ui-kit_components_link_variants_states_default_properties_text_text-transform */
5
+ /* recursica-ignore: --recursica_ui-kit_components_link_variants_states_hover_properties_text_text-transform */
6
+ /* recursica-ignore: --recursica_ui-kit_components_link_variants_states_visited_properties_text_text-transform */
7
+ /* recursica-ignore: --recursica_ui-kit_components_link_variants_states_visited-hover_properties_text_text-transform */
8
+
1
9
  /*
2
10
  HARDCODED VALUES:
3
11
  - display: inline-flex; (Base layout to align icon and text correctly)
@@ -1,3 +1,8 @@
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 */
5
+
1
6
  /* HARDCODED VALUES:
2
7
  - border-style: solid. Structural rendering rule for the dropdown border (Mantine uses Paper which may not set border natively).
3
8
  - opacity: 0.5 on disabled items. Recursica has no dedicated disabled-opacity token for menu items.
@@ -27,11 +32,12 @@
27
32
  box-shadow: var(--recursica_ui-kit_components_menu_properties_elevation);
28
33
 
29
34
  min-width: var(--recursica_ui-kit_components_menu_properties_min-width);
35
+ max-height: var(--recursica_ui-kit_components_menu_properties_max-height);
30
36
  max-width: var(--recursica_ui-kit_components_menu_properties_max-width);
31
37
 
32
- padding: var(
33
- --recursica_ui-kit_components_menu-item_properties_divider-item-gap
34
- );
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;
35
41
  }
36
42
 
37
43
  /* ======================================
@@ -83,9 +89,7 @@
83
89
  color: var(
84
90
  --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_text
85
91
  );
86
- opacity: var(
87
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_opacity
88
- );
92
+ opacity: 1;
89
93
  }
90
94
 
91
95
  /* Override Mantine's native hover background to use our overlay technique */
@@ -104,7 +108,7 @@
104
108
  z-index: 0;
105
109
  pointer-events: none;
106
110
  background-color: var(
107
- --recursica_ui-kit_components_menu-item_properties_hover-color
111
+ --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_hover-color
108
112
  );
109
113
  opacity: 0;
110
114
  transition: opacity 150ms ease;
@@ -112,8 +116,7 @@
112
116
 
113
117
  .item:hover:not([data-disabled])::after {
114
118
  opacity: var(
115
- --recursica_ui-kit_components_menu-item_properties_hover-opacity,
116
- 0.1
119
+ --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_hover-opacity
117
120
  );
118
121
  }
119
122
 
@@ -125,8 +128,12 @@
125
128
  color: var(
126
129
  --recursica_ui-kit_components_menu-item_properties_colors_selected-item_text
127
130
  );
128
- opacity: var(
129
- --recursica_ui-kit_components_menu-item_properties_colors_selected-item_opacity
131
+ opacity: 1;
132
+ }
133
+
134
+ .item[data-selected]::after {
135
+ background-color: var(
136
+ --recursica_ui-kit_components_menu-item_properties_colors_selected-item_hover-color
130
137
  );
131
138
  }
132
139
 
@@ -138,15 +145,21 @@
138
145
  }
139
146
  .item[data-hovered]::after {
140
147
  opacity: var(
141
- --recursica_ui-kit_components_menu-item_properties_hover-opacity,
142
- 0.1
148
+ --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_hover-opacity
149
+ );
150
+ }
151
+
152
+ .item[data-hovered][data-selected]::after {
153
+ opacity: var(
154
+ --recursica_ui-kit_components_menu-item_properties_colors_selected-item_hover-opacity
143
155
  );
144
156
  }
145
157
 
146
158
  /* Disabled item */
147
159
  .item[data-disabled] {
148
- /* HARDCODE: 0.5 opacity fallback; no dedicated disabled-opacity token for menu items */
149
- opacity: 0.5;
160
+ opacity: var(
161
+ --recursica_ui-kit_components_menu-item_properties_disabled-opacity
162
+ );
150
163
  }
151
164
 
152
165
  /* ======================================
@@ -166,7 +179,46 @@
166
179
  .itemSection {
167
180
  position: relative;
168
181
  z-index: 1;
169
- color: inherit;
182
+ }
183
+
184
+ .itemSection[data-position="left"] {
185
+ width: var(
186
+ --recursica_ui-kit_components_menu-item_properties_icon-leading-size
187
+ );
188
+ height: var(
189
+ --recursica_ui-kit_components_menu-item_properties_icon-leading-size
190
+ );
191
+ margin-right: var(
192
+ --recursica_ui-kit_components_menu-item_properties_icon-text-gap
193
+ );
194
+ color: var(
195
+ --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_leading-icon-color
196
+ );
197
+ }
198
+
199
+ .itemSection[data-position="right"] {
200
+ width: var(
201
+ --recursica_ui-kit_components_menu-item_properties_icon-trailing-size
202
+ );
203
+ height: var(
204
+ --recursica_ui-kit_components_menu-item_properties_icon-trailing-size
205
+ );
206
+ margin-left: var(--recursica_ui-kit_components_menu-item_properties_text-gap);
207
+ color: var(
208
+ --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_trailing-icon-color
209
+ );
210
+ }
211
+
212
+ .item[data-selected] .itemSection[data-position="left"] {
213
+ color: var(
214
+ --recursica_ui-kit_components_menu-item_properties_colors_selected-item_leading-icon-color
215
+ );
216
+ }
217
+
218
+ .item[data-selected] .itemSection[data-position="right"] {
219
+ color: var(
220
+ --recursica_ui-kit_components_menu-item_properties_colors_selected-item_trailing-icon-color
221
+ );
170
222
  }
171
223
 
172
224
  /* ======================================
@@ -174,19 +226,12 @@
174
226
  ====================================== */
175
227
 
176
228
  .divider {
177
- height: var(
178
- --recursica_ui-kit_components_menu-item_properties_divider-height
179
- );
229
+ height: var(--recursica_ui-kit_components_menu_properties_divider-height);
180
230
  background-color: var(
181
- --recursica_ui-kit_components_menu-item_properties_colors_divider-color
231
+ --recursica_ui-kit_components_menu_properties_colors_divider-color
182
232
  );
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;
233
+ opacity: var(--recursica_ui-kit_components_menu_properties_divider-opacity);
234
+ margin: 8px 0;
190
235
  }
191
236
 
192
237
  /* ======================================
@@ -228,9 +273,7 @@
228
273
  color: var(
229
274
  --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_supporting-text-color
230
275
  );
231
- opacity: var(
232
- --recursica_ui-kit_components_menu-item_properties_colors_unselected-item_supporting-text-opacity
233
- );
276
+ opacity: 0.7;
234
277
  }
235
278
 
236
279
  /* ======================================
@@ -1,3 +1,10 @@
1
+ /* EXEMPTIONS:
2
+ - content-style and header-style parent variables represent raw JSON styling objects rather than
3
+ direct CSS variables and cannot be applied directly in standard CSS files.
4
+ Sub-properties are fully and individually mapped to elements natively. */
5
+ /* recursica-ignore: --recursica_ui-kit_components_modal_properties_content-style */
6
+ /* recursica-ignore: --recursica_ui-kit_components_modal_properties_header-style */
7
+
1
8
  .root {
2
9
  }
3
10
 
@@ -7,82 +14,120 @@
7
14
 
8
15
  .content {
9
16
  /* Geometric Bounds */
10
- min-width: var(
11
- --recursica_ui-kit_components_modal_properties_min-width
12
- ) !important;
13
- max-width: var(
14
- --recursica_ui-kit_components_modal_properties_max-width
15
- ) !important;
16
- min-height: var(
17
- --recursica_ui-kit_components_modal_properties_min-height
18
- ) !important;
17
+ min-width: var(--recursica_ui-kit_components_modal_properties_min-width);
18
+ max-width: var(--recursica_ui-kit_components_modal_properties_max-width);
19
+ min-height: var(--recursica_ui-kit_components_modal_properties_min-height);
19
20
 
20
21
  /* Restrict max-height to either the UI Kit max or the viewport bounds to force internal scrolling */
21
22
  max-height: min(
22
23
  var(--recursica_ui-kit_components_modal_properties_max-height),
23
24
  calc(100vh - 4rem)
24
- ) !important;
25
- overflow: hidden !important;
25
+ );
26
+ overflow: hidden;
26
27
 
27
28
  /* Box model */
28
29
  border-radius: var(
29
30
  --recursica_ui-kit_components_modal_properties_border-radius
30
- ) !important;
31
- border-width: var(
32
- --recursica_ui-kit_components_modal_properties_border-size
33
- ) !important;
31
+ );
32
+ border-width: var(--recursica_ui-kit_components_modal_properties_border-size);
34
33
  border-color: var(
35
- --recursica_ui-kit_components_modal_colors_border-color
36
- ) !important;
37
- border-style: solid !important;
34
+ --recursica_ui-kit_components_modal_properties_colors_border-color
35
+ );
36
+ border-style: solid;
38
37
 
39
38
  /* Appearance */
40
39
  background-color: var(
41
- --recursica_ui-kit_components_modal_colors_background
42
- ) !important;
43
- box-shadow: var(
44
- --recursica_ui-kit_components_modal_properties_elevation
45
- ) !important;
40
+ --recursica_ui-kit_components_modal_properties_colors_background
41
+ );
42
+ box-shadow: var(--recursica_ui-kit_components_modal_properties_elevation);
46
43
 
47
44
  /* Internal Flex container to trap header and let body scroll */
48
- display: flex !important;
49
- flex-direction: column !important;
45
+ display: flex;
46
+ flex-direction: column;
50
47
  }
51
48
 
52
49
  .header {
53
50
  padding: var(--recursica_ui-kit_components_modal_properties_vertical-padding)
54
- var(--recursica_ui-kit_components_modal_properties_horizontal-padding) !important;
55
- background-color: transparent !important; /* Inherit from content */
51
+ var(--recursica_ui-kit_components_modal_properties_horizontal-padding);
52
+ background-color: transparent; /* Inherit from content */
56
53
  }
57
54
 
58
55
  .title {
59
- /* Typography Class Injection */
60
- composes: recursica_brand_typography_h2 from global;
61
- color: var(--recursica_ui-kit_components_modal_colors_title) !important;
56
+ color: var(--recursica_ui-kit_components_modal_properties_colors_title);
57
+
58
+ /* Direct Figma Typography Mapping */
59
+ font-family: var(
60
+ --recursica_ui-kit_components_modal_properties_header-style_fontFamily
61
+ );
62
+ font-size: var(
63
+ --recursica_ui-kit_components_modal_properties_header-style_fontSize
64
+ );
65
+ font-style: var(
66
+ --recursica_ui-kit_components_modal_properties_header-style_fontStyle
67
+ );
68
+ font-weight: var(
69
+ --recursica_ui-kit_components_modal_properties_header-style_fontWeight
70
+ );
71
+ letter-spacing: var(
72
+ --recursica_ui-kit_components_modal_properties_header-style_letterSpacing
73
+ );
74
+ line-height: var(
75
+ --recursica_ui-kit_components_modal_properties_header-style_lineHeight
76
+ );
77
+ text-transform: var(
78
+ --recursica_ui-kit_components_modal_properties_header-style_textCase
79
+ );
80
+ text-decoration: var(
81
+ --recursica_ui-kit_components_modal_properties_header-style_textDecoration
82
+ );
62
83
  }
63
84
 
64
85
  .bodyWrapper {
65
86
  /* This is the container that overrides Mantine's native Body. It strips padding and acts as a flex column. */
66
- padding: 0 !important;
87
+ padding: 0;
67
88
  display: flex;
68
89
  flex-direction: column;
69
90
  flex: 1 1 auto;
70
- overflow: hidden !important;
71
- min-height: 0 !important; /* Critical for flex child scrolling constraint */
91
+ overflow: hidden;
92
+ min-height: 0; /* Critical for flex child scrolling constraint */
72
93
  }
73
94
 
74
95
  .scrollArea {
75
96
  padding: var(--recursica_ui-kit_components_modal_properties_vertical-padding)
76
- var(--recursica_ui-kit_components_modal_properties_horizontal-padding) !important;
97
+ var(--recursica_ui-kit_components_modal_properties_horizontal-padding);
77
98
 
78
99
  /* Internal scrolling */
79
100
  flex: 1 1 auto;
80
- overflow-y: auto !important;
81
- min-height: 0 !important; /* Critical for flex child scrolling constraint */
101
+ overflow-y: auto;
102
+ min-height: 0; /* Critical for flex child scrolling constraint */
82
103
 
83
- /* Typography */
84
- composes: recursica_brand_typography_body from global;
85
- color: var(--recursica_ui-kit_components_modal_colors_content) !important;
104
+ color: var(--recursica_ui-kit_components_modal_properties_colors_content);
105
+
106
+ /* Direct Figma Typography Mapping */
107
+ font-family: var(
108
+ --recursica_ui-kit_components_modal_properties_content-style_fontFamily
109
+ );
110
+ font-size: var(
111
+ --recursica_ui-kit_components_modal_properties_content-style_fontSize
112
+ );
113
+ font-style: var(
114
+ --recursica_ui-kit_components_modal_properties_content-style_fontStyle
115
+ );
116
+ font-weight: var(
117
+ --recursica_ui-kit_components_modal_properties_content-style_fontWeight
118
+ );
119
+ letter-spacing: var(
120
+ --recursica_ui-kit_components_modal_properties_content-style_letterSpacing
121
+ );
122
+ line-height: var(
123
+ --recursica_ui-kit_components_modal_properties_content-style_lineHeight
124
+ );
125
+ text-transform: var(
126
+ --recursica_ui-kit_components_modal_properties_content-style_textCase
127
+ );
128
+ text-decoration: var(
129
+ --recursica_ui-kit_components_modal_properties_content-style_textDecoration
130
+ );
86
131
 
87
132
  /* Ensure button gap token is easily usable if developers use standard spacing */
88
133
  --modal-button-gap: var(
@@ -94,29 +139,29 @@
94
139
  border-top: var(
95
140
  --recursica_ui-kit_components_modal_properties_scroll-divider-thickness
96
141
  )
97
- solid transparent !important;
142
+ solid transparent;
98
143
  border-bottom: var(
99
144
  --recursica_ui-kit_components_modal_properties_scroll-divider-thickness
100
145
  )
101
- solid transparent !important;
146
+ solid transparent;
102
147
  }
103
148
 
104
149
  .scrollArea[data-scrolled-top] {
105
150
  border-top-color: var(
106
- --recursica_ui-kit_components_modal_colors_scroll-divider
107
- ) !important;
151
+ --recursica_ui-kit_components_modal_properties_colors_scroll-divider
152
+ );
108
153
  }
109
154
 
110
155
  .scrollArea[data-scrolled-bottom] {
111
156
  border-bottom-color: var(
112
- --recursica_ui-kit_components_modal_colors_scroll-divider
113
- ) !important;
157
+ --recursica_ui-kit_components_modal_properties_colors_scroll-divider
158
+ );
114
159
  }
115
160
 
116
161
  .footer {
117
162
  padding: var(--recursica_ui-kit_components_modal_properties_vertical-padding)
118
- var(--recursica_ui-kit_components_modal_properties_horizontal-padding) !important;
119
- background-color: transparent !important;
163
+ var(--recursica_ui-kit_components_modal_properties_horizontal-padding);
164
+ background-color: transparent;
120
165
  display: flex;
121
166
  justify-content: flex-end;
122
167
  gap: var(--recursica_ui-kit_components_modal_properties_button-gap);
@@ -1,3 +1,25 @@
1
+ /* EXEMPTIONS:
2
+ - state-specific border-size variables are ignored because the input box uses a uniform static boundary to prevent
3
+ unexpected layout shifts or flickering when switching between active, focused, or error states. */
4
+ /* recursica-ignore: --recursica_ui-kit_components_number-input_variants_states_default_properties_border-size */
5
+ /* recursica-ignore: --recursica_ui-kit_components_number-input_variants_states_disabled_properties_border-size */
6
+ /* recursica-ignore: --recursica_ui-kit_components_number-input_variants_states_error_properties_border-size */
7
+ /* recursica-ignore: --recursica_ui-kit_components_number-input_variants_states_focus_properties_border-size */
8
+
9
+ /* LAYOUT SPACING OVERRIDES:
10
+ - Sets the --form-control-margin-bottom spacing hook to map component-specific layout tokens. */
11
+ .layoutOverride {
12
+ --form-control-margin-bottom: var(
13
+ --recursica_ui-kit_components_number-input_variants_layouts_stacked_properties_top-bottom-margin
14
+ );
15
+ }
16
+
17
+ .layoutOverride[data-form-layout="side-by-side"] {
18
+ --form-control-margin-bottom: var(
19
+ --recursica_ui-kit_components_number-input_variants_layouts_side-by-side_properties_top-bottom-margin
20
+ );
21
+ }
22
+
1
23
  /* HARDCODED VALUES:
2
24
  - border-width: 1px. Native geometric boundary for the input box.
3
25
  - border-style: solid. Native structural rendering rule.
@@ -16,22 +38,18 @@
16
38
 
17
39
  /* Override Mantine native Input variables governing section spacing padding mathematics safely */
18
40
  --input-left-section-size: calc(
19
- var(--recursica_ui-kit_components_number-input_properties_icon-size) +
20
- (
21
- var(
22
- --recursica_ui-kit_components_number-input_properties_horizontal-padding
23
- ) *
24
- 2
25
- )
41
+ var(
42
+ --recursica_ui-kit_components_number-input_properties_horizontal-padding
43
+ ) +
44
+ var(--recursica_ui-kit_components_number-input_properties_icon-size) +
45
+ var(--recursica_ui-kit_components_number-input_properties_icon-text-gap)
26
46
  );
27
47
  --input-right-section-size: calc(
28
- var(--recursica_ui-kit_components_number-input_properties_icon-size) +
29
- (
30
- var(
31
- --recursica_ui-kit_components_number-input_properties_horizontal-padding
32
- ) *
33
- 2
34
- )
48
+ var(
49
+ --recursica_ui-kit_components_number-input_properties_horizontal-padding
50
+ ) +
51
+ var(--recursica_ui-kit_components_number-input_properties_icon-size) +
52
+ var(--recursica_ui-kit_components_number-input_properties_icon-text-gap)
35
53
  );
36
54
  }
37
55
 
@@ -123,10 +141,23 @@
123
141
  .section {
124
142
  display: flex;
125
143
  align-items: center;
126
- justify-content: center;
127
144
  height: 100%;
128
145
  }
129
146
 
147
+ .section[data-position="left"] {
148
+ justify-content: flex-start;
149
+ padding-left: var(
150
+ --recursica_ui-kit_components_number-input_properties_horizontal-padding
151
+ );
152
+ }
153
+
154
+ .section[data-position="right"] {
155
+ justify-content: flex-end;
156
+ padding-right: var(
157
+ --recursica_ui-kit_components_number-input_properties_horizontal-padding
158
+ );
159
+ }
160
+
130
161
  .section :global(svg) {
131
162
  width: var(--recursica_ui-kit_components_number-input_properties_icon-size);
132
163
  height: var(--recursica_ui-kit_components_number-input_properties_icon-size);
@@ -84,9 +84,13 @@ export const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(
84
84
  control: styles.control,
85
85
  };
86
86
 
87
+ const wrapperClass = className
88
+ ? `${styles.layoutOverride} ${className}`
89
+ : styles.layoutOverride;
90
+
87
91
  return (
88
92
  <WithReadOnlyWrapper
89
- className={className}
93
+ className={wrapperClass}
90
94
  style={style as React.CSSProperties}
91
95
  controlMaxWidth="var(--recursica_ui-kit_components_number-input_properties_max-width)"
92
96
  controlMinWidth="var(--recursica_ui-kit_components_number-input_properties_min-width)"