@recursica/mui-adapter 0.4.0 → 0.6.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 (177) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/mui-adapter.cjs +74 -1
  3. package/dist/mui-adapter.cjs.map +1 -1
  4. package/dist/mui-adapter.css +1 -1
  5. package/dist/mui-adapter.js +6651 -201
  6. package/dist/mui-adapter.js.map +1 -1
  7. package/dist/src/components/Accordion/Accordion.d.ts +63 -2
  8. package/dist/src/components/AssistiveElement/AssistiveElement.d.ts +9 -2
  9. package/dist/src/components/Autocomplete/Autocomplete.d.ts +17 -0
  10. package/dist/src/components/Autocomplete/index.d.ts +1 -0
  11. package/dist/src/components/Avatar/Avatar.d.ts +14 -2
  12. package/dist/src/components/Badge/Badge.d.ts +13 -3
  13. package/dist/src/components/Breadcrumb/Breadcrumb.d.ts +10 -3
  14. package/dist/src/components/Button/Button.d.ts +1 -1
  15. package/dist/src/components/Card/Card.d.ts +40 -3
  16. package/dist/src/components/Checkbox/Checkbox.d.ts +15 -2
  17. package/dist/src/components/Checkbox/CheckboxGroup.d.ts +16 -0
  18. package/dist/src/components/Checkbox/index.d.ts +5 -1
  19. package/dist/src/components/Chip/Chip.d.ts +18 -2
  20. package/dist/src/components/Dropdown/Dropdown.d.ts +23 -3
  21. package/dist/src/components/FormControlLayout/FormControlLayout.d.ts +10 -2
  22. package/dist/src/components/FormControlWrapper/FormControlWrapper.d.ts +24 -2
  23. package/dist/src/components/HoverCard/HoverCard.d.ts +55 -3
  24. package/dist/src/components/Label/Label.d.ts +13 -2
  25. package/dist/src/components/Link/Link.d.ts +1 -1
  26. package/dist/src/components/Menu/Menu.d.ts +99 -3
  27. package/dist/src/components/Modal/Modal.d.ts +36 -2
  28. package/dist/src/components/NumberInput/NumberInput.d.ts +14 -2
  29. package/dist/src/components/Pagination/Pagination.d.ts +44 -2
  30. package/dist/src/components/Pagination/Pagination.icons.d.ts +8 -0
  31. package/dist/src/components/Panel/Panel.d.ts +65 -3
  32. package/dist/src/components/Radio/Radio.d.ts +13 -3
  33. package/dist/src/components/Radio/RadioGroup.d.ts +13 -0
  34. package/dist/src/components/ReadOnlyField/ReadOnlyBooleanField.d.ts +5 -0
  35. package/dist/src/components/ReadOnlyField/ReadOnlyField.d.ts +7 -2
  36. package/dist/src/components/ReadOnlyField/ReadOnlySwitchField.d.ts +5 -0
  37. package/dist/src/components/ReadOnlyField/ReadOnlyTextField.d.ts +8 -0
  38. package/dist/src/components/ReadOnlyField/WithReadOnlyWrapper.d.ts +28 -0
  39. package/dist/src/components/ReadOnlyField/index.d.ts +1 -0
  40. package/dist/src/components/SegmentedControl/SegmentedControl.d.ts +31 -3
  41. package/dist/src/components/Slider/Slider.d.ts +28 -2
  42. package/dist/src/components/Stepper/Stepper.d.ts +21 -2
  43. package/dist/src/components/Switch/Switch.d.ts +10 -3
  44. package/dist/src/components/Switch/SwitchGroup.d.ts +13 -0
  45. package/dist/src/components/Tabs/Tabs.d.ts +35 -3
  46. package/dist/src/components/Text/Text.d.ts +1 -1
  47. package/dist/src/components/TextArea/TextArea.d.ts +18 -2
  48. package/dist/src/components/TextField/TextField.d.ts +16 -2
  49. package/dist/src/components/Timeline/Timeline.d.ts +14 -2
  50. package/dist/src/components/Timeline/TimelineItem.d.ts +29 -0
  51. package/dist/src/components/Title/Title.d.ts +1 -1
  52. package/dist/src/components/Toast/Toast.d.ts +25 -2
  53. package/dist/src/components/Tooltip/Tooltip.d.ts +42 -3
  54. package/dist/src/components/Typography/Typography.d.ts +1 -1
  55. package/dist/src/components/index.d.ts +1 -0
  56. package/package.json +12 -2
  57. package/src/GlobalExemptions.modules.css +13 -0
  58. package/src/components/Accordion/Accordion.module.css +295 -0
  59. package/src/components/Accordion/Accordion.stories.tsx +149 -21
  60. package/src/components/Accordion/Accordion.tsx +264 -4
  61. package/src/components/AssistiveElement/AssistiveElement.module.css +111 -0
  62. package/src/components/AssistiveElement/AssistiveElement.stories.tsx +76 -19
  63. package/src/components/AssistiveElement/AssistiveElement.tsx +85 -4
  64. package/src/components/Autocomplete/Autocomplete.module.css +325 -0
  65. package/src/components/Autocomplete/Autocomplete.stories.tsx +196 -0
  66. package/src/components/Autocomplete/Autocomplete.tsx +201 -0
  67. package/src/components/Autocomplete/index.ts +1 -0
  68. package/src/components/Avatar/Avatar.module.css +344 -0
  69. package/src/components/Avatar/Avatar.stories.tsx +94 -22
  70. package/src/components/Avatar/Avatar.tsx +110 -5
  71. package/src/components/Badge/Badge.module.css +127 -0
  72. package/src/components/Badge/Badge.stories.tsx +65 -22
  73. package/src/components/Badge/Badge.tsx +70 -5
  74. package/src/components/Breadcrumb/Breadcrumb.module.css +26 -0
  75. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +57 -22
  76. package/src/components/Breadcrumb/Breadcrumb.tsx +62 -5
  77. package/src/components/Button/Button.module.css +113 -20
  78. package/src/components/Button/Button.stories.tsx +3 -0
  79. package/src/components/Button/Button.tsx +10 -3
  80. package/src/components/Card/Card.module.css +118 -0
  81. package/src/components/Card/Card.stories.tsx +117 -19
  82. package/src/components/Card/Card.tsx +179 -4
  83. package/src/components/Checkbox/Checkbox.module.css +232 -0
  84. package/src/components/Checkbox/Checkbox.stories.tsx +81 -19
  85. package/src/components/Checkbox/Checkbox.tsx +146 -4
  86. package/src/components/Checkbox/CheckboxGroup.tsx +117 -0
  87. package/src/components/Checkbox/index.ts +6 -1
  88. package/src/components/Chip/Chip.module.css +236 -0
  89. package/src/components/Chip/Chip.stories.tsx +101 -21
  90. package/src/components/Chip/Chip.tsx +138 -5
  91. package/src/components/DatePicker/DatePicker.module.css +42 -0
  92. package/src/components/DatePicker/DatePicker.tsx +1 -0
  93. package/src/components/Dropdown/Dropdown.module.css +296 -0
  94. package/src/components/Dropdown/Dropdown.stories.tsx +80 -21
  95. package/src/components/Dropdown/Dropdown.tsx +182 -5
  96. package/src/components/FileInput/FileInput.module.css +47 -0
  97. package/src/components/FileInput/FileInput.tsx +1 -0
  98. package/src/components/FileUpload/FileUpload.module.css +40 -0
  99. package/src/components/FileUpload/FileUpload.tsx +1 -0
  100. package/src/components/FormControlLayout/FormControlLayout.module.css +92 -0
  101. package/src/components/FormControlLayout/FormControlLayout.stories.tsx +74 -19
  102. package/src/components/FormControlLayout/FormControlLayout.tsx +58 -4
  103. package/src/components/FormControlWrapper/FormControlWrapper.module.css +96 -0
  104. package/src/components/FormControlWrapper/FormControlWrapper.stories.tsx +122 -19
  105. package/src/components/FormControlWrapper/FormControlWrapper.tsx +145 -6
  106. package/src/components/HoverCard/HoverCard.module.css +91 -0
  107. package/src/components/HoverCard/HoverCard.stories.tsx +158 -21
  108. package/src/components/HoverCard/HoverCard.tsx +150 -4
  109. package/src/components/Label/Label.module.css +136 -0
  110. package/src/components/Label/Label.stories.tsx +98 -17
  111. package/src/components/Label/Label.tsx +88 -4
  112. package/src/components/Link/Link.module.css +8 -0
  113. package/src/components/Menu/Menu.module.css +287 -0
  114. package/src/components/Menu/Menu.stories.tsx +307 -21
  115. package/src/components/Menu/Menu.tsx +318 -4
  116. package/src/components/Modal/Modal.module.css +172 -0
  117. package/src/components/Modal/Modal.stories.tsx +66 -22
  118. package/src/components/Modal/Modal.tsx +216 -3
  119. package/src/components/NumberInput/NumberInput.module.css +281 -0
  120. package/src/components/NumberInput/NumberInput.stories.tsx +83 -20
  121. package/src/components/NumberInput/NumberInput.tsx +148 -5
  122. package/src/components/Pagination/Pagination.icons.tsx +66 -0
  123. package/src/components/Pagination/Pagination.module.css +307 -0
  124. package/src/components/Pagination/Pagination.stories.tsx +42 -21
  125. package/src/components/Pagination/Pagination.tsx +193 -4
  126. package/src/components/Panel/Panel.module.css +206 -0
  127. package/src/components/Panel/Panel.stories.tsx +214 -22
  128. package/src/components/Panel/Panel.tsx +153 -4
  129. package/src/components/Radio/Radio.module.css +220 -0
  130. package/src/components/Radio/Radio.stories.tsx +77 -19
  131. package/src/components/Radio/Radio.tsx +178 -4
  132. package/src/components/Radio/RadioGroup.tsx +111 -0
  133. package/src/components/ReadOnlyField/ReadOnlyBooleanField.tsx +21 -0
  134. package/src/components/ReadOnlyField/ReadOnlyField.module.css +54 -0
  135. package/src/components/ReadOnlyField/ReadOnlyField.stories.tsx +175 -16
  136. package/src/components/ReadOnlyField/ReadOnlyField.tsx +109 -4
  137. package/src/components/ReadOnlyField/ReadOnlySwitchField.tsx +21 -0
  138. package/src/components/ReadOnlyField/ReadOnlyTextField.tsx +48 -0
  139. package/src/components/ReadOnlyField/WithReadOnlyWrapper.tsx +93 -0
  140. package/src/components/ReadOnlyField/index.ts +1 -0
  141. package/src/components/SegmentedControl/SegmentedControl.module.css +203 -0
  142. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +102 -20
  143. package/src/components/SegmentedControl/SegmentedControl.tsx +110 -5
  144. package/src/components/Slider/Slider.module.css +542 -0
  145. package/src/components/Slider/Slider.stories.tsx +157 -19
  146. package/src/components/Slider/Slider.tsx +282 -4
  147. package/src/components/Stepper/Stepper.module.css +410 -0
  148. package/src/components/Stepper/Stepper.stories.tsx +132 -19
  149. package/src/components/Stepper/Stepper.tsx +145 -5
  150. package/src/components/Switch/Switch.module.css +238 -0
  151. package/src/components/Switch/Switch.stories.tsx +98 -19
  152. package/src/components/Switch/Switch.tsx +153 -5
  153. package/src/components/Switch/SwitchGroup.tsx +111 -0
  154. package/src/components/Tabs/Tabs.module.css +422 -0
  155. package/src/components/Tabs/Tabs.stories.tsx +138 -19
  156. package/src/components/Tabs/Tabs.tsx +103 -5
  157. package/src/components/TextArea/TextArea.module.css +160 -0
  158. package/src/components/TextArea/TextArea.stories.tsx +80 -21
  159. package/src/components/TextArea/TextArea.tsx +156 -5
  160. package/src/components/TextField/TextField.module.css +266 -0
  161. package/src/components/TextField/TextField.stories.tsx +168 -15
  162. package/src/components/TextField/TextField.tsx +171 -5
  163. package/src/components/TimePicker/TimePicker.module.css +41 -0
  164. package/src/components/TimePicker/TimePicker.tsx +1 -0
  165. package/src/components/Timeline/Timeline.module.css +367 -0
  166. package/src/components/Timeline/Timeline.stories.tsx +114 -21
  167. package/src/components/Timeline/Timeline.tsx +80 -4
  168. package/src/components/Timeline/TimelineItem.tsx +101 -0
  169. package/src/components/Toast/Toast.module.css +170 -0
  170. package/src/components/Toast/Toast.stories.tsx +54 -22
  171. package/src/components/Toast/Toast.tsx +90 -4
  172. package/src/components/Tooltip/Tooltip.module.css +90 -0
  173. package/src/components/Tooltip/Tooltip.stories.tsx +152 -22
  174. package/src/components/Tooltip/Tooltip.tsx +114 -4
  175. package/src/components/TransferList/TransferList.module.css +38 -0
  176. package/src/components/TransferList/TransferList.tsx +1 -0
  177. package/src/components/index.ts +1 -0
@@ -75,7 +75,7 @@
75
75
  * to create contrast for solid variants without changing the loader color.
76
76
  */
77
77
  .root[data-loading="true"] {
78
- opacity: 1 !important;
78
+ opacity: 1;
79
79
  }
80
80
 
81
81
  .root[data-size="default"][data-variant="solid"][data-loading="true"] {
@@ -91,7 +91,7 @@
91
91
  100%
92
92
  ),
93
93
  transparent
94
- ) !important;
94
+ );
95
95
  }
96
96
 
97
97
  .root[data-size="small"][data-variant="solid"][data-loading="true"] {
@@ -107,44 +107,60 @@
107
107
  100%
108
108
  ),
109
109
  transparent
110
- ) !important;
110
+ );
111
111
  }
112
112
 
113
113
  /* ==== SIZES ==== */
114
114
  .root[data-size="default"] {
115
- border-radius: var(
116
- --recursica_ui-kit_components_button_variants_sizes_default_properties_border-radius
117
- );
118
115
  height: var(
119
116
  --recursica_ui-kit_components_button_variants_sizes_default_properties_height
120
117
  );
118
+ }
119
+ .root[data-size="default"][data-content="label"] {
120
+ border-radius: var(
121
+ --recursica_ui-kit_components_button_variants_content_label_variants_sizes_default_properties_border-radius
122
+ );
121
123
  min-width: var(
122
- --recursica_ui-kit_components_button_variants_sizes_default_properties_min-width
124
+ --recursica_ui-kit_components_button_variants_content_label_variants_sizes_default_properties_min-width
123
125
  );
124
126
  padding: 0
125
127
  var(
126
- --recursica_ui-kit_components_button_variants_sizes_default_properties_horizontal-padding
128
+ --recursica_ui-kit_components_button_variants_content_label_variants_sizes_default_properties_horizontal-padding
127
129
  );
128
130
  }
129
- .root[data-size="default"] .labelText {
130
- max-width: var(
131
- --recursica_ui-kit_components_button_variants_sizes_default_properties_max-label-width
131
+ .root[data-size="default"][data-content="icon-label"] {
132
+ border-radius: var(
133
+ --recursica_ui-kit_components_button_variants_content_icon-label_variants_sizes_default_properties_border-radius
132
134
  );
135
+ min-width: var(
136
+ --recursica_ui-kit_components_button_variants_content_icon-label_variants_sizes_default_properties_min-width
137
+ );
138
+ padding: 0
139
+ var(
140
+ --recursica_ui-kit_components_button_variants_content_icon-label_variants_sizes_default_properties_horizontal-padding
141
+ );
133
142
  }
134
- .root[data-size="small"] {
143
+ .root[data-size="default"][data-content="icon-only"] {
135
144
  border-radius: var(
136
- --recursica_ui-kit_components_button_variants_sizes_small_properties_border-radius
137
- );
138
- height: var(
139
- --recursica_ui-kit_components_button_variants_sizes_small_properties_height
145
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_default_properties_border-radius
140
146
  );
141
147
  min-width: var(
142
- --recursica_ui-kit_components_button_variants_sizes_small_properties_min-width
148
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_default_properties_min-width
143
149
  );
144
150
  padding: 0
145
151
  var(
146
- --recursica_ui-kit_components_button_variants_sizes_small_properties_horizontal-padding
152
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_default_properties_horizontal-padding
147
153
  );
154
+ }
155
+ .root[data-size="default"] .labelText {
156
+ max-width: var(
157
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_max-label-width
158
+ );
159
+ }
160
+ .root[data-size="small"] {
161
+ height: var(
162
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_height
163
+ );
148
164
 
149
165
  /* Override specific typography for small */
150
166
  font-family: var(
@@ -166,6 +182,42 @@
166
182
  )
167
183
  );
168
184
  }
185
+ .root[data-size="small"][data-content="label"] {
186
+ border-radius: var(
187
+ --recursica_ui-kit_components_button_variants_content_label_variants_sizes_small_properties_border-radius
188
+ );
189
+ min-width: var(
190
+ --recursica_ui-kit_components_button_variants_content_label_variants_sizes_small_properties_min-width
191
+ );
192
+ padding: 0
193
+ var(
194
+ --recursica_ui-kit_components_button_variants_content_label_variants_sizes_small_properties_horizontal-padding
195
+ );
196
+ }
197
+ .root[data-size="small"][data-content="icon-label"] {
198
+ border-radius: var(
199
+ --recursica_ui-kit_components_button_variants_content_icon-label_variants_sizes_small_properties_border-radius
200
+ );
201
+ min-width: var(
202
+ --recursica_ui-kit_components_button_variants_content_icon-label_variants_sizes_small_properties_min-width
203
+ );
204
+ padding: 0
205
+ var(
206
+ --recursica_ui-kit_components_button_variants_content_icon-label_variants_sizes_small_properties_horizontal-padding
207
+ );
208
+ }
209
+ .root[data-size="small"][data-content="icon-only"] {
210
+ border-radius: var(
211
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_border-radius
212
+ );
213
+ min-width: var(
214
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_min-width
215
+ );
216
+ padding: 0
217
+ var(
218
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_horizontal-padding
219
+ );
220
+ }
169
221
  .root[data-size="small"] .labelText {
170
222
  max-width: var(
171
223
  --recursica_ui-kit_components_button_variants_sizes_small_properties_max-label-width
@@ -218,8 +270,11 @@
218
270
  }
219
271
 
220
272
  /* Icon-only logic overrides */
221
- .root[data-icon-only] .MuiButton-startIcon,
222
- .root[data-icon-only] .MuiButton-endIcon {
273
+ .root[data-content="icon-only"] .labelText {
274
+ display: none;
275
+ }
276
+ .root[data-content="icon-only"] .MuiButton-startIcon,
277
+ .root[data-content="icon-only"] .MuiButton-endIcon {
223
278
  margin-right: 0;
224
279
  margin-left: 0;
225
280
  }
@@ -288,10 +343,18 @@
288
343
  --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text
289
344
  );
290
345
  }
346
+ .root[data-variant="solid"] .iconWrapper {
347
+ color: var(
348
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_icon-color
349
+ );
350
+ }
291
351
  .root[data-variant="solid"]:hover:not(:disabled):not(:global(.Mui-disabled)) {
292
352
  color: var(
293
353
  --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text-hover
294
354
  );
355
+ box-shadow: var(
356
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_hover-elevation
357
+ );
295
358
  }
296
359
 
297
360
  /* OUTLINE */
@@ -312,10 +375,18 @@
312
375
  --recursica_ui-kit_components_button_variants_styles_outline_properties_colors_text
313
376
  );
314
377
  }
378
+ .root[data-variant="outline"] .iconWrapper {
379
+ color: var(
380
+ --recursica_ui-kit_components_button_variants_styles_outline_properties_colors_icon-color
381
+ );
382
+ }
315
383
  .root[data-variant="outline"]:hover:not(:disabled):not(:global(.Mui-disabled)) {
316
384
  color: var(
317
385
  --recursica_ui-kit_components_button_variants_styles_outline_properties_colors_text-hover
318
386
  );
387
+ box-shadow: var(
388
+ --recursica_ui-kit_components_button_variants_styles_outline_properties_hover-elevation
389
+ );
319
390
  }
320
391
 
321
392
  /* TEXT */
@@ -336,8 +407,30 @@
336
407
  --recursica_ui-kit_components_button_variants_styles_text_properties_colors_text
337
408
  );
338
409
  }
410
+ .root[data-variant="text"] .iconWrapper {
411
+ color: var(
412
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_icon-color
413
+ );
414
+ }
339
415
  .root[data-variant="text"]:hover:not(:disabled):not(:global(.Mui-disabled)) {
340
416
  color: var(
341
417
  --recursica_ui-kit_components_button_variants_styles_text_properties_colors_text-hover
342
418
  );
419
+ box-shadow: var(
420
+ --recursica_ui-kit_components_button_variants_styles_text_properties_hover-elevation
421
+ );
343
422
  }
423
+
424
+ /* EXEMPTIONS:
425
+ These general button properties are redundant because visual mapping has been refactored
426
+ to content-specific variables (_content_label_sizes_... etc.) or are handled by design defaults. */
427
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_default_properties_horizontal-padding */
428
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_default_properties_min-width */
429
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_small_properties_horizontal-padding */
430
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_small_properties_hover-opacity */
431
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_small_properties_min-width */
432
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_small_properties_text_font-style */
433
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_small_properties_text_letter-spacing */
434
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_small_properties_text_line-height */
435
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_small_properties_text_text-decoration */
436
+ /* recursica-ignore: --recursica_ui-kit_components_button_variants_sizes_small_properties_text_text-transform */
@@ -10,6 +10,9 @@ const meta: Meta<ButtonStoryProps> = {
10
10
  component: Button,
11
11
  tags: ["autodocs"],
12
12
  argTypes: {
13
+ disabled: {
14
+ control: "boolean",
15
+ },
13
16
  variant: {
14
17
  control: "select",
15
18
  options: ["solid", "outline", "text"],
@@ -78,8 +78,15 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
78
78
 
79
79
  const hasStartIcon = !!icon || !!restRecord["startIcon"];
80
80
  const hasEndIcon = !!restRecord["endIcon"];
81
- const isIconOnly =
82
- (hasStartIcon || hasEndIcon) && !hasVisibleChildren(children);
81
+ const hasVisibleText = hasVisibleChildren(children);
82
+ const isIconOnly = (hasStartIcon || hasEndIcon) && !hasVisibleText;
83
+
84
+ let contentType = "label";
85
+ if (isIconOnly) {
86
+ contentType = "icon-only";
87
+ } else if (hasStartIcon || hasEndIcon) {
88
+ contentType = "icon-label";
89
+ }
83
90
 
84
91
  if (
85
92
  typeof process !== "undefined" &&
@@ -129,7 +136,7 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
129
136
  }
130
137
  data-variant={variant}
131
138
  data-size={size}
132
- {...(isIconOnly ? { "data-icon-only": "" } : {})}
139
+ data-content={contentType}
133
140
  {...(restRecord.loading ? { "data-loading": "true" } : {})}
134
141
  {...sanitizedProps}
135
142
  disabled={!!restRecord.disabled || !!restRecord.loading}
@@ -0,0 +1,118 @@
1
+ /* HARDCODED VALUES:
2
+ - display: flex on root
3
+ - flex-direction: column
4
+ - gap: section-gap
5
+ */
6
+
7
+ .root {
8
+ /* HARDCODE: Map Recursica explicitly into Mantine's variable format so internal components know the margins */
9
+ --card-padding: var(--recursica_ui-kit_components_card_properties_padding);
10
+
11
+ background-color: var(
12
+ --recursica_ui-kit_components_card_properties_colors_background
13
+ );
14
+ border-radius: var(
15
+ --recursica_ui-kit_components_card_properties_borders_border-radius
16
+ );
17
+ border: var(--recursica_ui-kit_components_card_properties_borders_border-size)
18
+ solid var(--recursica_ui-kit_components_card_properties_colors_border-color);
19
+ box-shadow: var(
20
+ --recursica_ui-kit_components_card_properties_elevations_elevation
21
+ );
22
+
23
+ padding: var(--card-padding);
24
+ min-width: var(--recursica_ui-kit_components_card_properties_min-width);
25
+ max-width: var(--recursica_ui-kit_components_card_properties_max-width);
26
+ color: var(--recursica_ui-kit_components_card_properties_colors_content);
27
+
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: var(--recursica_ui-kit_components_card_properties_section-gap);
31
+ }
32
+
33
+ .header {
34
+ background-color: var(
35
+ --recursica_ui-kit_components_card_properties_colors_header-background
36
+ );
37
+ padding: var(--recursica_ui-kit_components_card_properties_header-padding);
38
+ color: var(--recursica_ui-kit_components_card_properties_colors_title);
39
+ border-bottom: var(--recursica_ui-kit_components_card_properties_divider-size)
40
+ solid
41
+ var(--recursica_ui-kit_components_card_properties_colors_divider-color);
42
+
43
+ /* Direct Figma Typography Mapping */
44
+ font-family: var(
45
+ --recursica_ui-kit_components_card_properties_header-style_fontFamily
46
+ );
47
+ font-size: var(
48
+ --recursica_ui-kit_components_card_properties_header-style_fontSize
49
+ );
50
+ font-style: var(
51
+ --recursica_ui-kit_components_card_properties_header-style_fontStyle
52
+ );
53
+ font-weight: var(
54
+ --recursica_ui-kit_components_card_properties_header-style_fontWeight
55
+ );
56
+ letter-spacing: var(
57
+ --recursica_ui-kit_components_card_properties_header-style_letterSpacing
58
+ );
59
+ line-height: var(
60
+ --recursica_ui-kit_components_card_properties_header-style_lineHeight
61
+ );
62
+ text-transform: var(
63
+ --recursica_ui-kit_components_card_properties_header-style_textCase
64
+ );
65
+ text-decoration: var(
66
+ --recursica_ui-kit_components_card_properties_header-style_textDecoration
67
+ );
68
+ }
69
+
70
+ .footer {
71
+ background-color: var(
72
+ --recursica_ui-kit_components_card_properties_colors_footer-background
73
+ );
74
+ padding: var(--recursica_ui-kit_components_card_properties_footer-padding);
75
+ border-top: var(--recursica_ui-kit_components_card_properties_divider-size)
76
+ solid
77
+ var(--recursica_ui-kit_components_card_properties_colors_divider-color);
78
+ }
79
+
80
+ .section {
81
+ /* Just maps standard section spacing overrides if passed explicitly */
82
+ margin-top: var(
83
+ --recursica_ui-kit_components_card_properties_vertical-gutter
84
+ );
85
+ }
86
+
87
+ .content {
88
+ display: flex;
89
+ flex-direction: column;
90
+ gap: var(--recursica_ui-kit_components_card_properties_vertical-gutter);
91
+ padding: 0;
92
+
93
+ /* Direct Figma Typography Mapping */
94
+ font-family: var(
95
+ --recursica_ui-kit_components_card_properties_content-style_fontFamily
96
+ );
97
+ font-size: var(
98
+ --recursica_ui-kit_components_card_properties_content-style_fontSize
99
+ );
100
+ font-style: var(
101
+ --recursica_ui-kit_components_card_properties_content-style_fontStyle
102
+ );
103
+ font-weight: var(
104
+ --recursica_ui-kit_components_card_properties_content-style_fontWeight
105
+ );
106
+ letter-spacing: var(
107
+ --recursica_ui-kit_components_card_properties_content-style_letterSpacing
108
+ );
109
+ line-height: var(
110
+ --recursica_ui-kit_components_card_properties_content-style_lineHeight
111
+ );
112
+ text-transform: var(
113
+ --recursica_ui-kit_components_card_properties_content-style_textCase
114
+ );
115
+ text-decoration: var(
116
+ --recursica_ui-kit_components_card_properties_content-style_textDecoration
117
+ );
118
+ }
@@ -1,35 +1,133 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
2
  import { Card } from "./Card";
3
- import { ComingSoon } from "@recursica/storybook-template";
3
+ import { Layer } from "@recursica/adapter-common";
4
+ import { Button } from "../Button/Button";
5
+ import { Group } from "../Group/Group";
6
+ import { Text } from "../Text/Text";
4
7
 
5
8
  const meta: Meta<typeof Card> = {
6
- title: "UI-Kit/🚧 Card",
9
+ title: "UI-Kit/Card",
7
10
  component: Card,
11
+ subcomponents: {
12
+ "Card.Header": Card.Header,
13
+ "Card.Content": Card.Content,
14
+ "Card.Footer": Card.Footer,
15
+ "Card.Section": Card.Section,
16
+ } as Record<string, React.ComponentType<unknown>>,
8
17
  tags: ["autodocs"],
9
18
  parameters: {
10
- controls: {
11
- include: [
12
- "layer",
13
- "withLayer",
14
- "children",
15
- "component",
16
- "variant",
17
- "size",
18
- "icon",
19
- "disabled",
20
- "href",
21
- "onClick",
22
- "onChange",
23
- "value",
24
- "checked",
25
- ],
19
+ docs: {
20
+ description: {
21
+ component:
22
+ "The Card component acts as the foundational padded surface for grouping related information. It relies on standard internal compositional nodes (`Card.Header`, `Card.Content`, `Card.Footer`) mapped directly to the active Recursica design tokens to enforce layout gaps and margins seamlessly. Use the provided dot-notation wrappers rather than building ad-hoc generic sections.",
23
+ },
26
24
  },
27
25
  },
26
+ argTypes: {},
28
27
  };
29
28
 
30
29
  export default meta;
30
+
31
31
  type Story = StoryObj<typeof Card>;
32
32
 
33
33
  export const Default: Story = {
34
- render: () => <ComingSoon componentName="Card" />,
34
+ args: {},
35
+ render: ({ ...args }) => {
36
+ return (
37
+ <div
38
+ style={{
39
+ padding: "48px",
40
+ backgroundColor:
41
+ "var(--recursica_brand_palettes_neutral_050_color_tone)",
42
+ }}
43
+ >
44
+ <Layer layer={0}>
45
+ <Card {...args}>
46
+ <Card.Header>Customer Activity Report</Card.Header>
47
+ <Card.Content>
48
+ <Text>
49
+ Card inner section content body. Notice how this acts as padded
50
+ content natively based on the overarching properties.
51
+ Recursica's vertical gutter governs vertical spacing between
52
+ siblings in the flex container.
53
+ </Text>
54
+ <Text>Another section showing the vertical gutter spacing.</Text>
55
+ </Card.Content>
56
+ <Card.Footer>
57
+ <Group justify="space-between" align="center">
58
+ <Text variant="caption">Generated today</Text>
59
+ <Button variant="solid">View Details</Button>
60
+ </Group>
61
+ </Card.Footer>
62
+ </Card>
63
+ </Layer>
64
+ </div>
65
+ );
66
+ },
67
+ };
68
+
69
+ export const HeaderlessAndFooterless: Story = {
70
+ args: {},
71
+ render: ({ ...args }) => {
72
+ return (
73
+ <div
74
+ style={{
75
+ padding: "48px",
76
+ backgroundColor:
77
+ "var(--recursica_brand_palettes_neutral_050_color_tone)",
78
+ }}
79
+ >
80
+ <Layer layer={0}>
81
+ <Card {...args}>
82
+ <Card.Content>
83
+ <Text variant="subtitle">Notice</Text>
84
+ <Text>
85
+ This is a completely generic card payload dropping the Header
86
+ and Footer specific elements, simply acting as a padded
87
+ elevation boundary box directly mirroring native composability!
88
+ </Text>
89
+ <Button variant="solid">Acknowledge</Button>
90
+ </Card.Content>
91
+ </Card>
92
+ </Layer>
93
+ </div>
94
+ );
95
+ },
96
+ };
97
+
98
+ export const LayerDemonstration: Story = {
99
+ args: {},
100
+ render: ({ ...args }) => {
101
+ return (
102
+ <div
103
+ style={{
104
+ display: "flex",
105
+ gap: "32px",
106
+ backgroundColor: "#e9ecef",
107
+ padding: "32px",
108
+ }}
109
+ >
110
+ <Layer layer={1}>
111
+ <Card {...args}>
112
+ <Card.Header>Layer 1 Wrapper</Card.Header>
113
+ <Card.Content>
114
+ <Text>Content inside layer 1 card.</Text>
115
+ </Card.Content>
116
+ </Card>
117
+ </Layer>
118
+
119
+ <Layer layer={2}>
120
+ <Card {...args}>
121
+ <Card.Header>Layer 2 Wrapper</Card.Header>
122
+ <Card.Content>
123
+ <Text>
124
+ Content inside layer 2 card exposing a higher elevation drop
125
+ shadow inherently cascaded.
126
+ </Text>
127
+ </Card.Content>
128
+ </Card>
129
+ </Layer>
130
+ </div>
131
+ );
132
+ },
35
133
  };