@recursica/mantine-adapter 0.21.0 → 0.23.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 (91) hide show
  1. package/CHANGELOG.md +18 -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 +2017 -1630
  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 +1 -1
  11. package/dist/src/components/Card/Card.d.ts +1 -1
  12. package/dist/src/components/DatePicker/DatePicker.d.ts +8 -2
  13. package/dist/src/components/Flex/Flex.d.ts +1 -1
  14. package/dist/src/components/Link/Link.d.ts +1 -1
  15. package/dist/src/components/SegmentedControl/SegmentedControl.d.ts +6 -1
  16. package/dist/src/components/Slider/Slider.d.ts +24 -2
  17. package/dist/src/components/Text/Text.d.ts +1 -1
  18. package/dist/src/components/Toast/Toast.d.ts +1 -1
  19. package/dist/src/components/index.d.ts +1 -0
  20. package/dist/test.html +1 -0
  21. package/package.json +5 -2
  22. package/src/GlobalExemptions.modules.css +13 -0
  23. package/src/components/AutoComplete/AUTOCOMPLETE_IMPLEMENTATION_NOTES.md +21 -0
  24. package/src/components/AutoComplete/AutoComplete.module.css +311 -0
  25. package/src/components/AutoComplete/AutoComplete.stories.tsx +187 -0
  26. package/src/components/AutoComplete/AutoComplete.tsx +154 -0
  27. package/src/components/Avatar/Avatar.module.css +40 -36
  28. package/src/components/Badge/Badge.module.css +4 -1
  29. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -10
  30. package/src/components/Button/Button.module.css +215 -56
  31. package/src/components/Button/Button.stories.tsx +27 -0
  32. package/src/components/Button/Button.tsx +11 -4
  33. package/src/components/Card/Card.module.css +58 -1
  34. package/src/components/Card/Card.stories.tsx +4 -2
  35. package/src/components/Checkbox/Checkbox.module.css +74 -46
  36. package/src/components/Checkbox/Checkbox.stories.tsx +3 -0
  37. package/src/components/Checkbox/CheckboxGroup.tsx +1 -9
  38. package/src/components/Chip/Chip.module.css +19 -1
  39. package/src/components/DatePicker/DATEPICKER_IMPLEMENTATION_NOTES.md +16 -0
  40. package/src/components/DatePicker/DatePicker.module.css +286 -0
  41. package/src/components/DatePicker/DatePicker.stories.tsx +127 -4
  42. package/src/components/DatePicker/DatePicker.tsx +166 -5
  43. package/src/components/Dropdown/Dropdown.module.css +42 -15
  44. package/src/components/Dropdown/Dropdown.stories.tsx +3 -0
  45. package/src/components/Dropdown/Dropdown.tsx +5 -1
  46. package/src/components/FileInput/FileInput.module.css +50 -0
  47. package/src/components/FileUpload/FileUpload.module.css +43 -0
  48. package/src/components/FormControlLayout/FormControlLayout.module.css +12 -2
  49. package/src/components/FormControlWrapper/FormControlWrapper.module.css +67 -0
  50. package/src/components/HoverCard/HoverCard.module.css +12 -5
  51. package/src/components/Label/Label.module.css +11 -3
  52. package/src/components/Link/Link.module.css +8 -0
  53. package/src/components/Loader/LOADER_IMPLEMENTATION_NOTES.md +1 -2
  54. package/src/components/Loader/Loader.module.css +3 -9
  55. package/src/components/Menu/Menu.module.css +73 -30
  56. package/src/components/Modal/Modal.module.css +92 -47
  57. package/src/components/NumberInput/NumberInput.module.css +46 -15
  58. package/src/components/NumberInput/NumberInput.tsx +5 -1
  59. package/src/components/Pagination/Pagination.module.css +123 -41
  60. package/src/components/Panel/Panel.module.css +55 -3
  61. package/src/components/Popover/Popover.module.css +6 -4
  62. package/src/components/Radio/Radio.module.css +72 -59
  63. package/src/components/Radio/Radio.stories.tsx +3 -0
  64. package/src/components/Radio/RadioGroup.tsx +1 -8
  65. package/src/components/ReadOnlyField/ReadOnlyField.module.css +14 -0
  66. package/src/components/ReadOnlyField/ReadOnlyField.tsx +16 -1
  67. package/src/components/SegmentedControl/SegmentedControl.module.css +106 -41
  68. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +1 -4
  69. package/src/components/SegmentedControl/SegmentedControl.tsx +18 -4
  70. package/src/components/Slider/IMPLEMENTATION_NOTES.md +49 -0
  71. package/src/components/Slider/Slider.module.css +498 -0
  72. package/src/components/Slider/Slider.stories.tsx +159 -4
  73. package/src/components/Slider/Slider.tsx +283 -4
  74. package/src/components/Stepper/Stepper.module.css +53 -2
  75. package/src/components/Switch/Switch.module.css +62 -23
  76. package/src/components/Switch/Switch.stories.tsx +3 -0
  77. package/src/components/Switch/Switch.tsx +1 -0
  78. package/src/components/Switch/SwitchGroup.tsx +3 -10
  79. package/src/components/Tabs/Tabs.module.css +33 -12
  80. package/src/components/TextArea/TextArea.module.css +58 -120
  81. package/src/components/TextArea/TextArea.stories.tsx +3 -0
  82. package/src/components/TextArea/TextArea.tsx +7 -3
  83. package/src/components/TextField/TextField.module.css +46 -15
  84. package/src/components/TextField/TextField.tsx +5 -1
  85. package/src/components/TimePicker/TimePicker.module.css +44 -0
  86. package/src/components/Timeline/Timeline.module.css +6 -0
  87. package/src/components/Toast/Toast.module.css +56 -1
  88. package/src/components/Toast/Toast.tsx +1 -1
  89. package/src/components/Tooltip/Tooltip.module.css +9 -0
  90. package/src/components/TransferList/TransferList.module.css +41 -0
  91. 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,16 @@
1
+ # DatePicker Implementation Notes
2
+
3
+ ## Architecture Overview
4
+
5
+ The `DatePicker` component is a wrapper around the `@mantine/dates` `DatePickerInput` component, implementing the `FormControlWrapper` macro structure for Recursica. This ensures that the component visually and structurally aligns with standard Recursica input primitives.
6
+
7
+ ## Structural Constraints
8
+
9
+ 1. **Naked Input Usage**: We intentionally pass `label={undefined}`, `description={undefined}`, and `error={undefined}` to the Mantine `DatePickerInput` component. This suppresses Mantine's internal macro form wrapping and ensures that only our `WithReadOnlyWrapper` > `FormControlWrapper` orchestrates labels, description text, and ARIA state error boundaries.
10
+ 2. **Read-Only Implementation**: Since the value type for `DatePickerInput` can be a date object, string, or array, the `WithReadOnlyWrapper` attempts to safely cast the output value using standard `String(value)`. For production apps utilizing heavy date formatting logic, developers can pass a custom `readOnlyComponent` explicitly to bypass this default cast.
11
+ 3. **Calendar Portal/Dropdown (Figma Token Issue)**: The Recursica UI Kit's `date-picker` component in Figma fails to export any explicit structural or color properties for the calendar popover itself (e.g. elevation, surface background, selected day colors). To solve this organically within the framework without breaking strict token adherence, we manually override the Mantine `.dropdown` and `.day[data-selected]` classes using `--recursica_ui-kit_components_hover-card-popover` tokens for elevation/padding/surfaces, and `--recursica_ui-kit_components_button_variants_styles_solid` tokens for the selected primary blue day. This guarantees strict visual adherence to the system until explicitly mapped tokens are provided in the UI Kit.
12
+
13
+ ## Styling Quirks
14
+
15
+ - The `DatePickerInput` mimics Mantine's `Input` structure natively (`.input`, `.wrapper`, `.section`). We attach our `styles.input` and `styles.root` classes exactly like `TextField`.
16
+ - The global layout margin override (`.layoutOverride`) utilizes `--form-control-margin-bottom` driven by specific stacked/side-by-side design tokens.
@@ -0,0 +1,286 @@
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_date-picker_variants_states_default_properties_border-size */
5
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_border-size */
6
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_variants_states_error_properties_border-size */
7
+ /* recursica-ignore: --recursica_ui-kit_components_date-picker_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_date-picker_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_date-picker_variants_layouts_side-by-side_properties_top-bottom-margin
20
+ );
21
+ }
22
+
23
+ /* HARDCODED VALUES:
24
+ - border-width: 1px. Native geometric boundary for the input box.
25
+ - border-style: solid. Native structural rendering rule.
26
+ - outline: none. Bypassing browser focus rings to rely strictly on Recursica focus states natively.
27
+ - flex/layout: display: flex on the root wrapper safely encapsulating internal section rendering.
28
+ */
29
+
30
+ .root {
31
+ display: flex;
32
+ position: relative;
33
+ width: var(--recursica_ui-kit_components_date-picker_properties_width, 100%);
34
+ min-height: var(
35
+ --recursica_ui-kit_components_date-picker_properties_min-height
36
+ );
37
+
38
+ /* Override Mantine native Input variables governing section spacing padding mathematics safely */
39
+ --input-left-section-size: calc(
40
+ var(
41
+ --recursica_ui-kit_components_date-picker_properties_horizontal-padding
42
+ ) +
43
+ var(--recursica_ui-kit_components_date-picker_properties_icon-size) +
44
+ var(--recursica_ui-kit_components_date-picker_properties_icon-text-gap)
45
+ );
46
+ --input-right-section-size: calc(
47
+ var(
48
+ --recursica_ui-kit_components_date-picker_properties_horizontal-padding
49
+ ) +
50
+ var(--recursica_ui-kit_components_date-picker_properties_icon-size) +
51
+ var(--recursica_ui-kit_components_date-picker_properties_icon-text-gap)
52
+ );
53
+ }
54
+
55
+ .input {
56
+ /* Structural Overrides */
57
+ width: 100%;
58
+ box-sizing: border-box;
59
+ margin: 0;
60
+
61
+ /* Box Geometry */
62
+ min-height: var(
63
+ --recursica_ui-kit_components_date-picker_properties_min-height
64
+ );
65
+ padding-top: var(
66
+ --recursica_ui-kit_components_date-picker_properties_vertical-padding
67
+ );
68
+ padding-bottom: var(
69
+ --recursica_ui-kit_components_date-picker_properties_vertical-padding
70
+ );
71
+ padding-left: var(
72
+ --recursica_ui-kit_components_date-picker_properties_horizontal-padding
73
+ );
74
+ padding-right: var(
75
+ --recursica_ui-kit_components_date-picker_properties_horizontal-padding
76
+ );
77
+ border-radius: var(
78
+ --recursica_ui-kit_components_date-picker_properties_border-radius
79
+ );
80
+ border-width: 1px;
81
+ border-style: solid;
82
+
83
+ /* Strict Typography Unification */
84
+ font-family: var(
85
+ --recursica_ui-kit_components_date-picker_properties_text_font-family
86
+ );
87
+ font-size: var(
88
+ --recursica_ui-kit_components_date-picker_properties_text_font-size
89
+ );
90
+ font-style: var(
91
+ --recursica_ui-kit_components_date-picker_properties_text_font-style
92
+ );
93
+ font-weight: var(
94
+ --recursica_ui-kit_components_date-picker_properties_text_font-weight
95
+ );
96
+ letter-spacing: var(
97
+ --recursica_ui-kit_components_date-picker_properties_text_letter-spacing
98
+ );
99
+ line-height: var(
100
+ --recursica_ui-kit_components_date-picker_properties_text_line-height
101
+ );
102
+ text-decoration: var(
103
+ --recursica_ui-kit_components_date-picker_properties_text_text-decoration
104
+ );
105
+ text-transform: var(
106
+ --recursica_ui-kit_components_date-picker_properties_text_text-transform
107
+ );
108
+
109
+ /* Base State Default Execution */
110
+ background-color: var(
111
+ --recursica_ui-kit_components_date-picker_variants_states_default_properties_colors_background
112
+ );
113
+ border-color: var(
114
+ --recursica_ui-kit_components_date-picker_variants_states_default_properties_colors_border-color
115
+ );
116
+ color: var(
117
+ --recursica_ui-kit_components_date-picker_variants_states_default_properties_colors_text
118
+ );
119
+
120
+ outline: none;
121
+ }
122
+
123
+ .input::placeholder {
124
+ opacity: var(
125
+ --recursica_ui-kit_components_date-picker_properties_placeholder-opacity
126
+ );
127
+ color: inherit;
128
+ }
129
+
130
+ /* Dynamic Padding Overrides */
131
+ .root[data-with-left-section] .input {
132
+ padding-left: var(--input-left-section-size);
133
+ }
134
+
135
+ .root[data-with-right-section] .input {
136
+ padding-right: var(--input-right-section-size);
137
+ }
138
+
139
+ /* Flexible End-Caps (Icons, actions) */
140
+ .section {
141
+ display: flex;
142
+ align-items: center;
143
+ height: 100%;
144
+ }
145
+
146
+ .section[data-position="left"] {
147
+ justify-content: flex-start;
148
+ padding-left: var(
149
+ --recursica_ui-kit_components_date-picker_properties_horizontal-padding
150
+ );
151
+ }
152
+
153
+ .section[data-position="right"] {
154
+ justify-content: flex-end;
155
+ padding-right: var(
156
+ --recursica_ui-kit_components_date-picker_properties_horizontal-padding
157
+ );
158
+ }
159
+
160
+ .section :global(svg) {
161
+ width: var(--recursica_ui-kit_components_date-picker_properties_icon-size);
162
+ height: var(--recursica_ui-kit_components_date-picker_properties_icon-size);
163
+ color: var(
164
+ --recursica_ui-kit_components_date-picker_variants_states_default_properties_colors_leading-icon
165
+ );
166
+ }
167
+
168
+ /* -------------------------------------
169
+ STATE CASCADE ARCHITECTURE
170
+ -------------------------------------- */
171
+
172
+ /* Focus State Mapping (Triggered internally via browser pseudo-pseudo-class) */
173
+ .input:focus-within,
174
+ .input:focus {
175
+ border-color: var(
176
+ --recursica_ui-kit_components_date-picker_variants_states_focus_properties_colors_border-color
177
+ );
178
+ background-color: var(
179
+ --recursica_ui-kit_components_date-picker_variants_states_focus_properties_colors_background
180
+ );
181
+ color: var(
182
+ --recursica_ui-kit_components_date-picker_variants_states_focus_properties_colors_text
183
+ );
184
+ }
185
+
186
+ .root:focus-within .section[data-position="left"] :global(svg) {
187
+ color: var(
188
+ --recursica_ui-kit_components_date-picker_variants_states_focus_properties_colors_leading-icon
189
+ );
190
+ }
191
+
192
+ /* Error State Mapping (Propagated strictly down from the wrapper DOM context) */
193
+ .root[data-error] .input {
194
+ border-color: var(
195
+ --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_border-color
196
+ ) !important;
197
+ background-color: var(
198
+ --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_background
199
+ ) !important;
200
+ color: var(
201
+ --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_text
202
+ ) !important;
203
+ }
204
+
205
+ .root[data-error] .section[data-position="left"] :global(svg) {
206
+ color: var(
207
+ --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_leading-icon
208
+ ) !important;
209
+ }
210
+
211
+ /* Disabled State Mapping (Propagated strictly down from the wrapper DOM context) */
212
+ .root[data-disabled] .input {
213
+ border-color: var(
214
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_border-color
215
+ ) !important;
216
+ background-color: var(
217
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_background
218
+ ) !important;
219
+ color: var(
220
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_text
221
+ ) !important;
222
+ cursor: not-allowed;
223
+ }
224
+
225
+ .root[data-disabled] .section[data-position="left"] :global(svg) {
226
+ color: var(
227
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_leading-icon
228
+ ) !important;
229
+ }
230
+
231
+ /* =========================================
232
+ CALENDAR POPOVER OVERRIDES
233
+ Maps generic popover & solid button tokens
234
+ to enforce Recursica's global styling.
235
+ ========================================= */
236
+
237
+ .dropdown {
238
+ background-color: var(
239
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_background
240
+ );
241
+ border: var(
242
+ --recursica_ui-kit_components_hover-card-popover_properties_border-size
243
+ )
244
+ solid
245
+ var(
246
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_border-color
247
+ );
248
+ border-radius: var(
249
+ --recursica_ui-kit_components_hover-card-popover_properties_border-radius
250
+ );
251
+ box-shadow: var(
252
+ --recursica_ui-kit_components_hover-card-popover_properties_elevation
253
+ );
254
+ padding: var(
255
+ --recursica_ui-kit_components_hover-card-popover_properties_vertical-padding
256
+ )
257
+ var(
258
+ --recursica_ui-kit_components_hover-card-popover_properties_horizontal-padding
259
+ );
260
+ font-family: var(
261
+ --recursica_ui-kit_components_hover-card-popover_properties_content-text_font-family
262
+ );
263
+ }
264
+
265
+ .calendarHeader {
266
+ color: var(
267
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_content
268
+ );
269
+ }
270
+
271
+ .day {
272
+ color: var(
273
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_content
274
+ );
275
+ border-radius: var(--recursica_brand_dimensions_border-radii_default, 4px);
276
+ }
277
+
278
+ .day[data-selected],
279
+ .day[data-selected]:hover {
280
+ background-color: var(
281
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_background
282
+ );
283
+ color: var(
284
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text
285
+ );
286
+ }