@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
@@ -16,7 +16,7 @@
16
16
  0
17
17
  );
18
18
  margin: 0; /* HARDCODE: structural reset; consider token if layout needs change */
19
- display: flex !important;
19
+ display: flex;
20
20
  flex-direction: column;
21
21
  gap: var(
22
22
  --recursica_ui-kit_components_checkbox-group_properties_item-gap,
@@ -68,53 +68,52 @@
68
68
  }
69
69
 
70
70
  .inner {
71
- display: flex !important;
72
- align-items: center !important;
73
- justify-content: center !important;
74
- margin: 0 !important; /* HARDCODE: structural reset */
75
- width: var(--recursica_ui-kit_components_checkbox_properties_size) !important;
76
- height: var(
77
- --recursica_ui-kit_components_checkbox_properties_size
78
- ) !important;
79
- /* Mathematically syncs the physical input checkbox bounding block visually with the center of the text's first line natively. */
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: center;
74
+ margin: 0; /* HARDCODE: structural reset */
75
+ width: var(--recursica_ui-kit_components_checkbox_properties_size);
76
+ height: var(--recursica_ui-kit_components_checkbox_properties_size);
77
+ /* Apply font-size to this element so that an 'em' based line-height token evaluates to the correct exact pixel value. */
78
+ font-size: var(
79
+ --recursica_ui-kit_components_checkbox-item_properties_text_font-size
80
+ );
81
+ /* Mathematically syncs the physical input checkbox bounding block visually with the center of the text's first line.
82
+ NOTE: Since the Figma line-height token resolves to an 'em' length (e.g. 1.05em), we CANNOT multiply it by font-size in CSS.
83
+ Instead, it naturally evaluates to the correct height because we applied the font-size above. */
80
84
  margin-top: calc(
81
85
  (
82
86
  var(
83
87
  --recursica_ui-kit_components_checkbox-item_properties_text_line-height
84
- ) *
85
- var(
86
- --recursica_ui-kit_components_checkbox-item_properties_text_font-size
87
88
  ) -
88
89
  var(--recursica_ui-kit_components_checkbox_properties_size)
89
90
  ) /
90
91
  2
91
- ) !important;
92
+ );
92
93
  }
93
94
 
94
95
  /* Base explicit reset masking underlying framework defaults */
95
96
  .input {
96
97
  cursor: pointer; /* HARDCODE: core interaction behavior */
97
98
  appearance: none; /* HARDCODE: reset native widget */
98
- box-sizing: border-box !important; /* HARDCODE: ensures size includes borders */
99
- width: var(--recursica_ui-kit_components_checkbox_properties_size) !important;
100
- height: var(
101
- --recursica_ui-kit_components_checkbox_properties_size
102
- ) !important;
99
+ box-sizing: border-box; /* HARDCODE: ensures size includes borders */
100
+ width: var(--recursica_ui-kit_components_checkbox_properties_size);
101
+ height: var(--recursica_ui-kit_components_checkbox_properties_size);
103
102
  border-radius: var(
104
103
  --recursica_ui-kit_components_checkbox_properties_border-radius
105
- ) !important;
104
+ );
106
105
  border-width: var(
107
106
  --recursica_ui-kit_components_checkbox_properties_border-size
108
- ) !important;
107
+ );
109
108
  border-style: solid; /* HARDCODE: normalize primitive border-style */
110
109
 
111
110
  /* Standard unchecked state */
112
111
  background-color: var(
113
112
  --recursica_ui-kit_components_checkbox_properties_colors_background-unchecked
114
- ) !important;
113
+ );
115
114
  border-color: var(
116
115
  --recursica_ui-kit_components_checkbox_properties_colors_border-unchecked
117
- ) !important;
116
+ );
118
117
  transition: all 0.2s ease; /* HARDCODE: consider global transition token */
119
118
  }
120
119
 
@@ -122,18 +121,18 @@
122
121
  .input:checked {
123
122
  background-color: var(
124
123
  --recursica_ui-kit_components_checkbox_properties_colors_background-checked
125
- ) !important;
124
+ );
126
125
  border-color: var(
127
126
  --recursica_ui-kit_components_checkbox_properties_colors_border-checked
128
- ) !important;
127
+ );
129
128
  }
130
129
  .input[data-indeterminate] {
131
130
  background-color: var(
132
131
  --recursica_ui-kit_components_checkbox_properties_colors_background-indeterminate
133
- ) !important;
132
+ );
134
133
  border-color: var(
135
134
  --recursica_ui-kit_components_checkbox_properties_colors_border-indeterminate
136
- ) !important;
135
+ );
137
136
  }
138
137
 
139
138
  /* Disabled State */
@@ -141,48 +140,44 @@
141
140
  cursor: not-allowed; /* HARDCODE: disabled state default */
142
141
  opacity: var(
143
142
  --recursica_ui-kit_components_checkbox_properties_disabled-opacity
144
- ) !important;
143
+ );
145
144
  background-color: var(
146
145
  --recursica_ui-kit_components_checkbox_properties_colors_disabled-background
147
- ) !important;
146
+ );
148
147
  border-color: var(
149
148
  --recursica_ui-kit_components_checkbox_properties_colors_disabled-border
150
- ) !important;
149
+ );
151
150
  }
152
151
 
153
152
  .icon {
154
- width: var(
155
- --recursica_ui-kit_components_checkbox_properties_icon-size
156
- ) !important;
157
- height: var(
158
- --recursica_ui-kit_components_checkbox_properties_icon-size
159
- ) !important;
153
+ width: var(--recursica_ui-kit_components_checkbox_properties_icon-size);
154
+ height: var(--recursica_ui-kit_components_checkbox_properties_icon-size);
160
155
  color: var(
161
156
  --recursica_ui-kit_components_checkbox_properties_colors_icon-color
162
- ) !important;
157
+ );
163
158
  }
164
159
  .input:disabled + .icon {
165
160
  color: var(
166
161
  --recursica_ui-kit_components_checkbox_properties_colors_disabled-icon
167
- ) !important;
162
+ );
168
163
  }
169
164
 
170
165
  .labelWrapper {
171
- padding: 0 !important; /* HARDCODE: structural layout reset */
172
- margin: 0 !important; /* HARDCODE: structural layout reset */
166
+ padding: 0; /* HARDCODE: structural layout reset */
167
+ margin: 0; /* HARDCODE: structural layout reset */
173
168
  flex: 1;
174
169
  min-width: 0; /* HARDCODE: forces text wrap boundary in flex child */
175
170
  }
176
171
 
177
172
  .label {
178
173
  cursor: pointer; /* HARDCODE: interactive affordance */
179
- padding: 0 !important; /* HARDCODE: reset layout */
180
- margin: 0 !important; /* HARDCODE: reset layout */
174
+ padding: 0; /* HARDCODE: reset layout */
175
+ margin: 0; /* HARDCODE: reset layout */
181
176
  word-wrap: break-word;
182
177
  white-space: normal;
183
178
  color: var(
184
- --recursica_ui-kit_components_checkbox-item_properties_text_color
185
- ) !important;
179
+ --recursica_ui-kit_components_checkbox-item_properties_colors_text
180
+ );
186
181
  font-family: var(
187
182
  --recursica_ui-kit_components_checkbox-item_properties_text_font-family
188
183
  );
@@ -195,10 +190,43 @@
195
190
  line-height: var(
196
191
  --recursica_ui-kit_components_checkbox-item_properties_text_line-height
197
192
  );
193
+ font-style: var(
194
+ --recursica_ui-kit_components_checkbox-item_properties_text_font-style
195
+ );
196
+ letter-spacing: var(
197
+ --recursica_ui-kit_components_checkbox-item_properties_text_letter-spacing
198
+ );
199
+ text-decoration: var(
200
+ --recursica_ui-kit_components_checkbox-item_properties_text_text-decoration
201
+ );
202
+ text-transform: var(
203
+ --recursica_ui-kit_components_checkbox-item_properties_text_text-transform
204
+ );
198
205
  }
199
- .root[data-disabled] .label {
206
+ .root:has(input:disabled) .label {
200
207
  cursor: not-allowed; /* HARDCODE: disabled interaction */
201
208
  opacity: var(
202
- --recursica_ui-kit_components_checkbox_properties_disabled-opacity
209
+ --recursica_ui-kit_components_checkbox-item_properties_disabled-opacity
210
+ );
211
+ color: var(
212
+ --recursica_ui-kit_components_checkbox-item_properties_colors_disabled-text
213
+ );
214
+ }
215
+
216
+ /* CheckboxGroup Layouts */
217
+ .groupRoot {
218
+ display: flex;
219
+ }
220
+ .groupRoot[data-layout="stacked"] {
221
+ flex-direction: column;
222
+ gap: var(
223
+ --recursica_ui-kit_components_checkbox-group_variants_layouts_stacked_properties_label-field-gap
224
+ );
225
+ }
226
+ .groupRoot[data-layout="side-by-side"] {
227
+ flex-direction: row;
228
+ flex-wrap: wrap;
229
+ gap: var(
230
+ --recursica_ui-kit_components_checkbox-group_variants_layouts_side-by-side_properties_gutter
203
231
  );
204
232
  }
@@ -24,6 +24,9 @@ To render a solitary component natively:
24
24
  },
25
25
  },
26
26
  argTypes: {
27
+ disabled: {
28
+ control: "boolean",
29
+ },
27
30
  readOnly: {
28
31
  control: "boolean",
29
32
  description:
@@ -100,15 +100,7 @@ export const CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(
100
100
  defaultValue={defaultValue}
101
101
  >
102
102
  <div className={styles.groupRoot} data-layout={formLayout}>
103
- {/* If the exact group is read-only natively, we inject disabled hooks dynamically over children? Mantine handles native context directly! */}
104
- {React.Children.map(children, (child) => {
105
- if (React.isValidElement(child)) {
106
- return React.cloneElement(child as React.ReactElement<any>, {
107
- disabled: readOnly || (child.props as any).disabled,
108
- });
109
- }
110
- return child;
111
- })}
103
+ {children}
112
104
  </div>
113
105
  </MantineCheckbox.Group>
114
106
  }
@@ -1,3 +1,18 @@
1
+ /* EXEMPTIONS:
2
+ - close-icon-color, leading-icon-color, and select-specific state icon variables are ignored because
3
+ Chip uses explicit state color definitions (e.g. unselected, selected, error, error-selected variant colors)
4
+ to drive pixel-perfect hover and click transitions, rather than generic single-color overrides.
5
+ - text-size is ignored since actual chip sizing is dynamically driven by precise vertical padding and line-heights. */
6
+ /* recursica-ignore: --recursica_ui-kit_components_chip_properties_close-icon-color */
7
+ /* recursica-ignore: --recursica_ui-kit_components_chip_properties_leading-icon-color */
8
+ /* recursica-ignore: --recursica_ui-kit_components_chip_properties_text-size */
9
+ /* recursica-ignore: --recursica_ui-kit_components_chip_variants_styles_error_properties_colors_leading-icon-color */
10
+ /* recursica-ignore: --recursica_ui-kit_components_chip_variants_styles_error_properties_colors_selected-icon-color */
11
+ /* recursica-ignore: --recursica_ui-kit_components_chip_variants_styles_error-selected_properties_colors_icon */
12
+ /* recursica-ignore: --recursica_ui-kit_components_chip_variants_styles_error-selected_properties_colors_leading-icon-color */
13
+ /* recursica-ignore: --recursica_ui-kit_components_chip_variants_styles_selected_properties_colors_leading-icon-color */
14
+ /* recursica-ignore: --recursica_ui-kit_components_chip_variants_styles_unselected_properties_colors_selected-icon-color */
15
+
1
16
  /* HARDCODED VALUES
2
17
  border-style: solid; (Baseline reset)
3
18
  box-sizing: border-box; (Baseline reset)
@@ -6,7 +21,7 @@
6
21
  outline: none; (Accessible fallback)
7
22
  padding: 0; (Override mantine default)
8
23
  background: transparent; (Override mantine default)
9
- */
24
+ */
10
25
 
11
26
  .root {
12
27
  /* Set preset layout variables to override mantine defaults safely */
@@ -58,6 +73,9 @@
58
73
  font-weight: var(
59
74
  --recursica_ui-kit_components_chip_properties_text_font-weight
60
75
  );
76
+ font-style: var(
77
+ --recursica_ui-kit_components_chip_properties_text_font-style
78
+ );
61
79
  letter-spacing: var(
62
80
  --recursica_ui-kit_components_chip_properties_text_letter-spacing
63
81
  );
@@ -0,0 +1,45 @@
1
+ /*
2
+ * EXEMPTIONS:
3
+ * - DatePicker is a "Coming Soon" stub component.
4
+ * - It renders a placeholder and has no active implementation or CSS stylesheet yet.
5
+ * - The following tokens generated by Figma are ignored until the component is fully built.
6
+ */
7
+
8
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_border-radius */
9
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_horizontal-padding */
10
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_icon-size */
11
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_icon-text-gap */
12
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_min-height */
13
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_placeholder-opacity */
14
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_text_font-family */
15
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_text_font-size */
16
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_text_font-style */
17
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_text_font-weight */
18
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_text_letter-spacing */
19
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_text_line-height */
20
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_text_text-decoration */
21
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_text_text-transform */
22
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_vertical-padding */
23
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_properties_width */
24
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_layouts_side-by-side_properties_top-bottom-margin */
25
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_layouts_stacked_properties_top-bottom-margin */
26
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_default_properties_border-size */
27
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_border-size */
28
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_error_properties_border-size */
29
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_focus_properties_border-size */
30
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_default_properties_colors_background */
31
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_default_properties_colors_border-color */
32
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_default_properties_colors_leading-icon */
33
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_default_properties_colors_text */
34
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_background */
35
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_border-color */
36
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_leading-icon */
37
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_text */
38
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_background */
39
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_border-color */
40
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_leading-icon */
41
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_text */
42
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_focus_properties_colors_background */
43
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_focus_properties_colors_border-color */
44
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_focus_properties_colors_leading-icon */
45
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_focus_properties_colors_text */
@@ -1,3 +1,25 @@
1
+ /* EXEMPTIONS:
2
+ - state-specific border-size variables are ignored because a uniform 1px border is applied globally to prevent
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 */
5
+ /* recursica-ignore: --recursica_ui-kit_components_dropdown_variants_states_disabled_properties_border-size */
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
+
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_dropdown_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_dropdown_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.
@@ -14,22 +36,14 @@
14
36
 
15
37
  /* Override Mantine native Input variables governing section spacing padding mathematics safely */
16
38
  --input-left-section-size: calc(
17
- var(--recursica_ui-kit_components_dropdown_properties_icon-size) +
18
- (
19
- var(
20
- --recursica_ui-kit_components_dropdown_properties_horizontal-padding
21
- ) *
22
- 2
23
- )
39
+ var(--recursica_ui-kit_components_dropdown_properties_horizontal-padding) +
40
+ var(--recursica_ui-kit_components_dropdown_properties_icon-size) +
41
+ var(--recursica_ui-kit_components_dropdown_properties_icon-text-gap)
24
42
  );
25
43
  --input-right-section-size: calc(
26
- var(--recursica_ui-kit_components_dropdown_properties_icon-size) +
27
- (
28
- var(
29
- --recursica_ui-kit_components_dropdown_properties_horizontal-padding
30
- ) *
31
- 2
32
- )
44
+ var(--recursica_ui-kit_components_dropdown_properties_horizontal-padding) +
45
+ var(--recursica_ui-kit_components_dropdown_properties_icon-size) +
46
+ var(--recursica_ui-kit_components_dropdown_properties_icon-text-gap)
33
47
  );
34
48
  }
35
49
 
@@ -118,10 +132,23 @@
118
132
  .section {
119
133
  display: flex;
120
134
  align-items: center;
121
- justify-content: center;
122
135
  height: 100%;
123
136
  }
124
137
 
138
+ .section[data-position="left"] {
139
+ justify-content: flex-start;
140
+ padding-left: var(
141
+ --recursica_ui-kit_components_dropdown_properties_horizontal-padding
142
+ );
143
+ }
144
+
145
+ .section[data-position="right"] {
146
+ justify-content: flex-end;
147
+ padding-right: var(
148
+ --recursica_ui-kit_components_dropdown_properties_horizontal-padding
149
+ );
150
+ }
151
+
125
152
  .section :global(svg) {
126
153
  width: var(--recursica_ui-kit_components_dropdown_properties_icon-size);
127
154
  height: var(--recursica_ui-kit_components_dropdown_properties_icon-size);
@@ -29,6 +29,9 @@ const meta: Meta<DropdownStoryProps> = {
29
29
  clearable: false,
30
30
  },
31
31
  argTypes: {
32
+ disabled: {
33
+ control: "boolean",
34
+ },
32
35
  ...formControlArgTypes,
33
36
  readOnly: {
34
37
  control: "boolean",
@@ -113,9 +113,13 @@ export const Dropdown = forwardRef<HTMLInputElement, DropdownProps>(
113
113
  width: containerWidth || "100%",
114
114
  };
115
115
 
116
+ const wrapperClass = className
117
+ ? `${styles.layoutOverride} ${className}`
118
+ : styles.layoutOverride;
119
+
116
120
  return (
117
121
  <WithReadOnlyWrapper
118
- className={className}
122
+ className={wrapperClass}
119
123
  style={injectedStyles}
120
124
  controlMaxWidth="var(--recursica_ui-kit_components_dropdown_properties_max-width)"
121
125
  controlMinWidth="var(--recursica_ui-kit_components_dropdown_properties_min-width)"
@@ -0,0 +1,50 @@
1
+ /*
2
+ * EXEMPTIONS:
3
+ * - FileInput is a "Coming Soon" stub component.
4
+ * - It renders a placeholder and has no active implementation or CSS stylesheet yet.
5
+ * - The following tokens generated by Figma are ignored until the component is fully built.
6
+ */
7
+
8
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_border-radius */
9
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_horizontal-padding */
10
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_icon-size */
11
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_icon-text-gap */
12
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_max-width */
13
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_min-height */
14
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_min-width */
15
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_placeholder-opacity */
16
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_text_font-family */
17
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_text_font-size */
18
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_text_font-style */
19
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_text_font-weight */
20
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_text_letter-spacing */
21
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_text_line-height */
22
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_text_text-decoration */
23
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_text_text-transform */
24
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_properties_vertical-padding */
25
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_layouts_side-by-side_properties_top-bottom-margin */
26
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_layouts_stacked_properties_top-bottom-margin */
27
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_default_properties_border-size */
28
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_disabled_properties_border-size */
29
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_error_properties_border-size */
30
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_focus_properties_border-size */
31
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_default_properties_colors_background */
32
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_default_properties_colors_border-color */
33
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_default_properties_colors_leading-icon */
34
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_default_properties_colors_text */
35
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_default_properties_colors_trailing-icon */
36
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_background */
37
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_border-color */
38
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_leading-icon */
39
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_text */
40
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_trailing-icon */
41
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_background */
42
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_border-color */
43
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_leading-icon */
44
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_text */
45
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_trailing-icon */
46
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_focus_properties_colors_background */
47
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_focus_properties_colors_border-color */
48
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_focus_properties_colors_leading-icon */
49
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_focus_properties_colors_text */
50
+ /* recursica-ignore: --recursica_ui-kit_components_file-input_variants_states_focus_properties_colors_trailing-icon */
@@ -0,0 +1,43 @@
1
+ /*
2
+ * EXEMPTIONS:
3
+ * - FileUpload is a "Coming Soon" stub component.
4
+ * - It renders a placeholder and has no active implementation or CSS stylesheet yet.
5
+ * - The following tokens generated by Figma are ignored until the component is fully built.
6
+ */
7
+
8
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_border-radius */
9
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_border-style */
10
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_item-gap */
11
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_list-spacing */
12
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_padding */
13
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_text_font-family */
14
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_text_font-size */
15
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_text_font-style */
16
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_text_font-weight */
17
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_text_letter-spacing */
18
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_text_line-height */
19
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_text_text-decoration */
20
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_text_text-transform */
21
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_properties_vertical-element-gap */
22
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_layouts_side-by-side_properties_top-bottom-margin */
23
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_layouts_stacked_properties_top-bottom-margin */
24
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_default_properties_border-size */
25
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_disabled_properties_border-size */
26
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_error_properties_border-size */
27
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_focus_properties_border-size */
28
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_default_properties_colors_background */
29
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_default_properties_colors_border-color */
30
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_default_properties_colors_text */
31
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_default_properties_colors_upload-icon */
32
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_disabled_properties_colors_background */
33
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_disabled_properties_colors_border-color */
34
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_disabled_properties_colors_text */
35
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_disabled_properties_colors_upload-icon */
36
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_error_properties_colors_background */
37
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_error_properties_colors_border-color */
38
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_error_properties_colors_text */
39
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_error_properties_colors_upload-icon */
40
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_focus_properties_colors_background */
41
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_focus_properties_colors_border-color */
42
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_focus_properties_colors_text */
43
+ /* recursica-ignore: --recursica_ui-kit_components_file-upload_variants_states_focus_properties_colors_upload-icon */
@@ -3,6 +3,10 @@
3
3
  .root {
4
4
  display: flex;
5
5
  margin: 0; /* Hardcoded structural reset */
6
+ margin-bottom: var(
7
+ --form-control-margin-bottom,
8
+ var(--recursica_ui-kit_globals_form_properties_vertical-item-gap, 0)
9
+ );
6
10
  padding: 0; /* Hardcoded structural reset */
7
11
  max-width: var(--form-control-max-width, 100%);
8
12
  min-width: var(--form-control-min-width, auto);
@@ -31,7 +35,10 @@
31
35
  .root[data-form-layout="stacked"] .leftSection {
32
36
  padding-bottom: var(
33
37
  --recursica_ui-kit_components_label_variants_layouts_stacked_properties_bottom-padding,
34
- 8px
38
+ var(
39
+ --recursica_ui-kit_globals_form_properties_label-field-gap-vertical,
40
+ 8px
41
+ )
35
42
  );
36
43
  min-height: var(
37
44
  --recursica_ui-kit_components_label_variants_layouts_stacked_properties_min-height,
@@ -56,7 +63,10 @@
56
63
  /* In side-by-side, the label column exists to the left of its input, so we use the gutter gap here. */
57
64
  margin-right: var(
58
65
  --recursica_ui-kit_components_label_variants_layouts_side-by-side_properties_gutter,
59
- 16px
66
+ var(
67
+ --recursica_ui-kit_globals_form_properties_label-field-gap-horizontal,
68
+ 16px
69
+ )
60
70
  );
61
71
  }
62
72
 
@@ -1,5 +1,71 @@
1
1
  /* FormControlWrapper.module.css */
2
2
 
3
+ .root {
4
+ /* Global Form Field Colors */
5
+ --form-field-background: var(
6
+ --recursica_ui-kit_globals_form_field_colors_background
7
+ );
8
+ --form-field-background-read-only: var(
9
+ --recursica_ui-kit_globals_form_field_colors_background-read-only
10
+ );
11
+ --form-field-border: var(--recursica_ui-kit_globals_form_field_colors_border);
12
+ --form-field-border-error: var(
13
+ --recursica_ui-kit_globals_form_field_colors_border-error
14
+ );
15
+ --form-field-border-focus: var(
16
+ --recursica_ui-kit_globals_form_field_colors_border-focus
17
+ );
18
+ --form-field-border-selected: var(
19
+ --recursica_ui-kit_globals_form_field_colors_border-selected
20
+ );
21
+ --form-field-disabled-background: var(
22
+ --recursica_ui-kit_globals_form_field_colors_disabled-background
23
+ );
24
+ --form-field-disabled-text: var(
25
+ --recursica_ui-kit_globals_form_field_colors_disabled-text
26
+ );
27
+ --form-field-icon: var(--recursica_ui-kit_globals_form_field_colors_icon);
28
+ --form-field-placeholder-text-opacity: var(
29
+ --recursica_ui-kit_globals_form_field_colors_placeholder-text-opacity
30
+ );
31
+ --form-field-text-valued: var(
32
+ --recursica_ui-kit_globals_form_field_colors_text-valued
33
+ );
34
+
35
+ /* Global Form Field Geometric Sizes */
36
+ --form-field-border-radius: var(
37
+ --recursica_ui-kit_globals_form_field_size_border-radius
38
+ );
39
+ --form-field-border-size-default: var(
40
+ --recursica_ui-kit_globals_form_field_size_border-size-default
41
+ );
42
+ --form-field-border-size-focus: var(
43
+ --recursica_ui-kit_globals_form_field_size_border-size-focus
44
+ );
45
+ --form-field-horizontal-padding: var(
46
+ --recursica_ui-kit_globals_form_field_size_horizontal-padding
47
+ );
48
+ --form-field-icon-size: var(--recursica_ui-kit_globals_form_field_size_icon);
49
+ --form-field-icon-text-gap: var(
50
+ --recursica_ui-kit_globals_form_field_size_icon-text-gap
51
+ );
52
+ --form-field-max-width: var(
53
+ --recursica_ui-kit_globals_form_field_size_max-width
54
+ );
55
+ --form-field-min-width: var(
56
+ --recursica_ui-kit_globals_form_field_size_min-width
57
+ );
58
+ --form-field-single-line-input-height: var(
59
+ --recursica_ui-kit_globals_form_field_size_single-line-input-height
60
+ );
61
+ --form-field-vertical-gutter: var(
62
+ --recursica_ui-kit_globals_form_field_size_vertical-gutter
63
+ );
64
+ --form-field-vertical-padding: var(
65
+ --recursica_ui-kit_globals_form_field_size_vertical-padding
66
+ );
67
+ }
68
+
3
69
  .inputSection {
4
70
  display: flex;
5
71
  flex-direction: column;