@recursica/adapter-mui-v7 1.0.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 (389) hide show
  1. package/.storybook/commonArgTypes.ts +148 -0
  2. package/ARCHITECTURE.md +18 -0
  3. package/CHANGELOG.md +582 -0
  4. package/LICENSE +21 -0
  5. package/OVERSTYLING.md +59 -0
  6. package/README.md +70 -0
  7. package/SETUP.md +92 -0
  8. package/USAGE.md +57 -0
  9. package/dist/adapter-mui-v7.cjs +292 -0
  10. package/dist/adapter-mui-v7.cjs.map +1 -0
  11. package/dist/adapter-mui-v7.css +1 -0
  12. package/dist/adapter-mui-v7.js +40757 -0
  13. package/dist/adapter-mui-v7.js.map +1 -0
  14. package/dist/index.d.ts +2350 -0
  15. package/dist/vite.svg +1 -0
  16. package/docs/PHILOSOPHY.md +39 -0
  17. package/llms.txt +76 -0
  18. package/package.json +151 -0
  19. package/recursica_brand.json +2677 -0
  20. package/recursica_tokens.json +799 -0
  21. package/recursica_ui-kit.json +14981 -0
  22. package/recursica_variables_scoped.css +30489 -0
  23. package/src/GlobalExemptions.modules.css +7 -0
  24. package/src/Introduction.stories.tsx +184 -0
  25. package/src/OverStyling.tsx +87 -0
  26. package/src/Version.tsx +37 -0
  27. package/src/components/Accordion/ACCORDION_IMPLEMENTATION_NOTES.md +107 -0
  28. package/src/components/Accordion/Accordion.module.css +362 -0
  29. package/src/components/Accordion/Accordion.stories.tsx +198 -0
  30. package/src/components/Accordion/Accordion.test.tsx +1 -0
  31. package/src/components/Accordion/Accordion.tsx +285 -0
  32. package/src/components/Accordion/USAGE.md +43 -0
  33. package/src/components/Accordion/index.ts +1 -0
  34. package/src/components/AssistiveElement/ASSISTIVEELEMENT_IMPLEMENTATION_NOTES.md +59 -0
  35. package/src/components/AssistiveElement/AssistiveElement.module.css +121 -0
  36. package/src/components/AssistiveElement/AssistiveElement.stories.tsx +68 -0
  37. package/src/components/AssistiveElement/AssistiveElement.test.tsx +1 -0
  38. package/src/components/AssistiveElement/AssistiveElement.tsx +94 -0
  39. package/src/components/AssistiveElement/USAGE.md +36 -0
  40. package/src/components/AssistiveElement/index.ts +1 -0
  41. package/src/components/AutoComplete/AutoComplete.module.css +456 -0
  42. package/src/components/AutoComplete/AutoComplete.stories.tsx +336 -0
  43. package/src/components/AutoComplete/AutoComplete.test.tsx +1 -0
  44. package/src/components/AutoComplete/AutoComplete.tsx +266 -0
  45. package/src/components/AutoComplete/IMPLEMENTATION_NOTES.md +37 -0
  46. package/src/components/AutoComplete/USAGE.md +68 -0
  47. package/src/components/AutoComplete/index.ts +1 -0
  48. package/src/components/Avatar/AVATAR_IMPLEMENTATION_NOTES.md +36 -0
  49. package/src/components/Avatar/Avatar.module.css +336 -0
  50. package/src/components/Avatar/Avatar.stories.tsx +92 -0
  51. package/src/components/Avatar/Avatar.test.tsx +1 -0
  52. package/src/components/Avatar/Avatar.tsx +88 -0
  53. package/src/components/Avatar/USAGE.md +38 -0
  54. package/src/components/Avatar/index.ts +1 -0
  55. package/src/components/Badge/Badge.module.css +115 -0
  56. package/src/components/Badge/Badge.stories.tsx +78 -0
  57. package/src/components/Badge/Badge.test.tsx +1 -0
  58. package/src/components/Badge/Badge.tsx +61 -0
  59. package/src/components/Badge/USAGE.md +40 -0
  60. package/src/components/Badge/index.ts +1 -0
  61. package/src/components/Breadcrumb/BREADCRUMB_IMPLEMENTATION_NOTES.md +51 -0
  62. package/src/components/Breadcrumb/Breadcrumb.module.css +51 -0
  63. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +114 -0
  64. package/src/components/Breadcrumb/Breadcrumb.test.tsx +1 -0
  65. package/src/components/Breadcrumb/Breadcrumb.tsx +70 -0
  66. package/src/components/Breadcrumb/USAGE.md +42 -0
  67. package/src/components/Breadcrumb/index.ts +1 -0
  68. package/src/components/Button/BUTTON_IMPLEMENTATION_NOTES.md +123 -0
  69. package/src/components/Button/Button.module.css +413 -0
  70. package/src/components/Button/Button.stories.tsx +196 -0
  71. package/src/components/Button/Button.styleIsolation.dom.test.tsx +98 -0
  72. package/src/components/Button/Button.tsx +156 -0
  73. package/src/components/Button/USAGE.md +46 -0
  74. package/src/components/Button/index.ts +1 -0
  75. package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +15 -0
  76. package/src/components/Card/Card.module.css +155 -0
  77. package/src/components/Card/Card.stories.tsx +131 -0
  78. package/src/components/Card/Card.test.tsx +1 -0
  79. package/src/components/Card/Card.tsx +202 -0
  80. package/src/components/Card/USAGE.md +57 -0
  81. package/src/components/Card/index.ts +1 -0
  82. package/src/components/Checkbox/CHECKBOX_IMPLEMENTATION_NOTES.md +14 -0
  83. package/src/components/Checkbox/Checkbox.module.css +286 -0
  84. package/src/components/Checkbox/Checkbox.stories.tsx +97 -0
  85. package/src/components/Checkbox/Checkbox.test.tsx +1 -0
  86. package/src/components/Checkbox/Checkbox.tsx +259 -0
  87. package/src/components/Checkbox/CheckboxGroup.stories.tsx +139 -0
  88. package/src/components/Checkbox/CheckboxGroup.tsx +148 -0
  89. package/src/components/Checkbox/USAGE.md +36 -0
  90. package/src/components/Checkbox/index.ts +6 -0
  91. package/src/components/Chip/CHIP_IMPLEMENTATION_NOTES.md +102 -0
  92. package/src/components/Chip/Chip.module.css +283 -0
  93. package/src/components/Chip/Chip.stories.tsx +154 -0
  94. package/src/components/Chip/Chip.test.tsx +1 -0
  95. package/src/components/Chip/Chip.tsx +168 -0
  96. package/src/components/Chip/USAGE.md +55 -0
  97. package/src/components/Chip/index.ts +1 -0
  98. package/src/components/Container/Container.stories.tsx +118 -0
  99. package/src/components/Container/Container.test.tsx +1 -0
  100. package/src/components/Container/Container.tsx +51 -0
  101. package/src/components/Container/IMPLEMENTATION_NOTES.md +5 -0
  102. package/src/components/Container/USAGE.md +48 -0
  103. package/src/components/Container/index.ts +1 -0
  104. package/src/components/DatePicker/DATEPICKER_IMPLEMENTATION_NOTES.md +29 -0
  105. package/src/components/DatePicker/DatePicker.icons.tsx +35 -0
  106. package/src/components/DatePicker/DatePicker.module.css +464 -0
  107. package/src/components/DatePicker/DatePicker.stories.tsx +163 -0
  108. package/src/components/DatePicker/DatePicker.test.tsx +1 -0
  109. package/src/components/DatePicker/DatePicker.tsx +229 -0
  110. package/src/components/DatePicker/USAGE.md +49 -0
  111. package/src/components/DatePicker/index.ts +1 -0
  112. package/src/components/Dropdown/BareDropdown.tsx +168 -0
  113. package/src/components/Dropdown/DROPDOWN_IMPLEMENTATION_NOTES.md +45 -0
  114. package/src/components/Dropdown/Dropdown.icons.tsx +33 -0
  115. package/src/components/Dropdown/Dropdown.module.css +535 -0
  116. package/src/components/Dropdown/Dropdown.stories.tsx +252 -0
  117. package/src/components/Dropdown/Dropdown.test.tsx +1 -0
  118. package/src/components/Dropdown/Dropdown.tsx +319 -0
  119. package/src/components/Dropdown/USAGE.md +68 -0
  120. package/src/components/Dropdown/index.ts +1 -0
  121. package/src/components/FileInput/FILEINPUT_IMPLEMENTATION_NOTES.md +153 -0
  122. package/src/components/FileInput/FileInput.module.css +268 -0
  123. package/src/components/FileInput/FileInput.stories.tsx +313 -0
  124. package/src/components/FileInput/FileInput.test.tsx +1 -0
  125. package/src/components/FileInput/FileInput.tsx +415 -0
  126. package/src/components/FileInput/USAGE.md +145 -0
  127. package/src/components/FileInput/index.ts +1 -0
  128. package/src/components/FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md +249 -0
  129. package/src/components/FileUpload/FileUpload.module.css +200 -0
  130. package/src/components/FileUpload/FileUpload.stories.tsx +362 -0
  131. package/src/components/FileUpload/FileUpload.test.tsx +1 -0
  132. package/src/components/FileUpload/FileUpload.tsx +352 -0
  133. package/src/components/FileUpload/USAGE.md +199 -0
  134. package/src/components/FileUpload/index.ts +1 -0
  135. package/src/components/Flex/Flex.stories.tsx +128 -0
  136. package/src/components/Flex/Flex.test.tsx +1 -0
  137. package/src/components/Flex/Flex.tsx +89 -0
  138. package/src/components/Flex/USAGE.md +41 -0
  139. package/src/components/Flex/index.ts +1 -0
  140. package/src/components/FormControlLayout/FormControlLayout.module.css +92 -0
  141. package/src/components/FormControlLayout/FormControlLayout.stories.tsx +118 -0
  142. package/src/components/FormControlLayout/FormControlLayout.test.tsx +1 -0
  143. package/src/components/FormControlLayout/FormControlLayout.tsx +72 -0
  144. package/src/components/FormControlLayout/USAGE.md +40 -0
  145. package/src/components/FormControlLayout/index.ts +1 -0
  146. package/src/components/FormControlWrapper/FORMCONTROLWRAPPER_IMPLEMENTATION_NOTES.md +35 -0
  147. package/src/components/FormControlWrapper/FormControlWrapper.module.css +87 -0
  148. package/src/components/FormControlWrapper/FormControlWrapper.stories.tsx +129 -0
  149. package/src/components/FormControlWrapper/FormControlWrapper.test.tsx +1 -0
  150. package/src/components/FormControlWrapper/FormControlWrapper.tsx +149 -0
  151. package/src/components/FormControlWrapper/USAGE.md +40 -0
  152. package/src/components/FormControlWrapper/index.ts +1 -0
  153. package/src/components/Grid/Grid.module.css +72 -0
  154. package/src/components/Grid/Grid.stories.tsx +161 -0
  155. package/src/components/Grid/Grid.test.tsx +1 -0
  156. package/src/components/Grid/Grid.tsx +155 -0
  157. package/src/components/Grid/IMPLEMENTATION_NOTES.md +24 -0
  158. package/src/components/Grid/USAGE.md +53 -0
  159. package/src/components/Grid/index.ts +1 -0
  160. package/src/components/Group/Group.stories.tsx +120 -0
  161. package/src/components/Group/Group.test.tsx +1 -0
  162. package/src/components/Group/Group.tsx +116 -0
  163. package/src/components/Group/USAGE.md +41 -0
  164. package/src/components/Group/index.ts +1 -0
  165. package/src/components/Heading/Heading.stories.tsx +50 -0
  166. package/src/components/Heading/Heading.test.tsx +1 -0
  167. package/src/components/Heading/Heading.tsx +28 -0
  168. package/src/components/Heading/USAGE.md +36 -0
  169. package/src/components/Heading/index.ts +1 -0
  170. package/src/components/HoverCard/HoverCard.module.css +107 -0
  171. package/src/components/HoverCard/HoverCard.stories.tsx +172 -0
  172. package/src/components/HoverCard/HoverCard.test.tsx +1 -0
  173. package/src/components/HoverCard/HoverCard.tsx +145 -0
  174. package/src/components/HoverCard/USAGE.md +45 -0
  175. package/src/components/HoverCard/index.ts +1 -0
  176. package/src/components/Label/LABEL_IMPLEMENTATION_NOTES.md +27 -0
  177. package/src/components/Label/Label.module.css +169 -0
  178. package/src/components/Label/Label.stories.tsx +131 -0
  179. package/src/components/Label/Label.test.tsx +1 -0
  180. package/src/components/Label/Label.tsx +96 -0
  181. package/src/components/Label/USAGE.md +36 -0
  182. package/src/components/Label/index.ts +1 -0
  183. package/src/components/Layer/USAGE.md +50 -0
  184. package/src/components/Link/LINK_IMPLEMENTATION_NOTES.md +9 -0
  185. package/src/components/Link/Link.module.css +105 -0
  186. package/src/components/Link/Link.stories.tsx +58 -0
  187. package/src/components/Link/Link.test.tsx +1 -0
  188. package/src/components/Link/Link.tsx +45 -0
  189. package/src/components/Link/USAGE.md +40 -0
  190. package/src/components/Link/index.ts +1 -0
  191. package/src/components/Loader/LOADER_IMPLEMENTATION_NOTES.md +25 -0
  192. package/src/components/Loader/Loader.animate.dom.test.tsx +72 -0
  193. package/src/components/Loader/Loader.module.css +175 -0
  194. package/src/components/Loader/Loader.stories.tsx +123 -0
  195. package/src/components/Loader/Loader.test.tsx +1 -0
  196. package/src/components/Loader/Loader.tsx +72 -0
  197. package/src/components/Loader/USAGE.md +42 -0
  198. package/src/components/Loader/index.ts +1 -0
  199. package/src/components/Menu/IMPLEMENTATION_NOTES.md +5 -0
  200. package/src/components/Menu/Menu.module.css +283 -0
  201. package/src/components/Menu/Menu.stories.tsx +405 -0
  202. package/src/components/Menu/Menu.test.tsx +1 -0
  203. package/src/components/Menu/Menu.tsx +103 -0
  204. package/src/components/Menu/USAGE.md +53 -0
  205. package/src/components/Menu/index.ts +1 -0
  206. package/src/components/Modal/MODAL_IMPLEMENTATION_NOTES.md +31 -0
  207. package/src/components/Modal/Modal.module.css +302 -0
  208. package/src/components/Modal/Modal.stories.tsx +105 -0
  209. package/src/components/Modal/Modal.test.tsx +1 -0
  210. package/src/components/Modal/Modal.tsx +231 -0
  211. package/src/components/Modal/USAGE.md +40 -0
  212. package/src/components/Modal/index.ts +1 -0
  213. package/src/components/NumberInput/NUMBER_INPUT_IMPLEMENTATION_NOTES.md +93 -0
  214. package/src/components/NumberInput/NumberInput.module.css +303 -0
  215. package/src/components/NumberInput/NumberInput.stories.tsx +96 -0
  216. package/src/components/NumberInput/NumberInput.test.tsx +1 -0
  217. package/src/components/NumberInput/NumberInput.tsx +273 -0
  218. package/src/components/NumberInput/USAGE.md +36 -0
  219. package/src/components/NumberInput/index.ts +1 -0
  220. package/src/components/Pagination/IMPLEMENTATION_NOTES.md +40 -0
  221. package/src/components/Pagination/Pagination.icons.tsx +66 -0
  222. package/src/components/Pagination/Pagination.module.css +197 -0
  223. package/src/components/Pagination/Pagination.stories.tsx +48 -0
  224. package/src/components/Pagination/Pagination.test.tsx +1 -0
  225. package/src/components/Pagination/Pagination.tsx +123 -0
  226. package/src/components/Pagination/USAGE.md +36 -0
  227. package/src/components/Pagination/index.ts +1 -0
  228. package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +133 -0
  229. package/src/components/Panel/Panel.module.css +231 -0
  230. package/src/components/Panel/Panel.stories.tsx +227 -0
  231. package/src/components/Panel/Panel.test.tsx +1 -0
  232. package/src/components/Panel/Panel.tsx +186 -0
  233. package/src/components/Panel/USAGE.md +46 -0
  234. package/src/components/Panel/index.ts +1 -0
  235. package/src/components/Popover/IMPLEMENTATION_NOTES.md +22 -0
  236. package/src/components/Popover/Popover.module.css +118 -0
  237. package/src/components/Popover/Popover.stories.tsx +133 -0
  238. package/src/components/Popover/Popover.test.tsx +1 -0
  239. package/src/components/Popover/Popover.tsx +267 -0
  240. package/src/components/Popover/USAGE.md +69 -0
  241. package/src/components/Popover/index.ts +1 -0
  242. package/src/components/Radio/RADIO_IMPLEMENTATION_NOTES.md +12 -0
  243. package/src/components/Radio/Radio.module.css +247 -0
  244. package/src/components/Radio/Radio.stories.tsx +93 -0
  245. package/src/components/Radio/Radio.test.tsx +1 -0
  246. package/src/components/Radio/Radio.tsx +223 -0
  247. package/src/components/Radio/RadioGroup.stories.tsx +117 -0
  248. package/src/components/Radio/RadioGroup.tsx +122 -0
  249. package/src/components/Radio/USAGE.md +36 -0
  250. package/src/components/Radio/index.ts +2 -0
  251. package/src/components/ReadOnlyField/ReadOnlyBooleanField.tsx +21 -0
  252. package/src/components/ReadOnlyField/ReadOnlyField.module.css +54 -0
  253. package/src/components/ReadOnlyField/ReadOnlyField.stories.tsx +163 -0
  254. package/src/components/ReadOnlyField/ReadOnlyField.test.tsx +1 -0
  255. package/src/components/ReadOnlyField/ReadOnlyField.tsx +108 -0
  256. package/src/components/ReadOnlyField/ReadOnlySwitchField.tsx +21 -0
  257. package/src/components/ReadOnlyField/ReadOnlyTextField.tsx +48 -0
  258. package/src/components/ReadOnlyField/USAGE.md +36 -0
  259. package/src/components/ReadOnlyField/WithReadOnlyWrapper.tsx +93 -0
  260. package/src/components/ReadOnlyField/index.ts +2 -0
  261. package/src/components/RecursicaThemeProvider/USAGE.md +60 -0
  262. package/src/components/SegmentedControl/IMPLEMENTATION_NOTES.md +14 -0
  263. package/src/components/SegmentedControl/SegmentedControl.module.css +201 -0
  264. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +106 -0
  265. package/src/components/SegmentedControl/SegmentedControl.test.tsx +1 -0
  266. package/src/components/SegmentedControl/SegmentedControl.tsx +149 -0
  267. package/src/components/SegmentedControl/USAGE.md +49 -0
  268. package/src/components/SegmentedControl/index.ts +1 -0
  269. package/src/components/Slider/IMPLEMENTATION_NOTES.md +55 -0
  270. package/src/components/Slider/Slider.module.css +635 -0
  271. package/src/components/Slider/Slider.stories.tsx +282 -0
  272. package/src/components/Slider/Slider.test.tsx +1 -0
  273. package/src/components/Slider/Slider.tsx +435 -0
  274. package/src/components/Slider/USAGE.md +56 -0
  275. package/src/components/Slider/index.ts +1 -0
  276. package/src/components/Stack/Stack.stories.tsx +108 -0
  277. package/src/components/Stack/Stack.test.tsx +1 -0
  278. package/src/components/Stack/Stack.tsx +43 -0
  279. package/src/components/Stack/USAGE.md +41 -0
  280. package/src/components/Stack/index.ts +1 -0
  281. package/src/components/Stepper/IMPLEMENTATION_NOTES.md +120 -0
  282. package/src/components/Stepper/Stepper.module.css +474 -0
  283. package/src/components/Stepper/Stepper.stories.tsx +157 -0
  284. package/src/components/Stepper/Stepper.test.tsx +1 -0
  285. package/src/components/Stepper/Stepper.tsx +240 -0
  286. package/src/components/Stepper/USAGE.md +45 -0
  287. package/src/components/Stepper/index.ts +1 -0
  288. package/src/components/Switch/SWITCH_IMPLEMENTATION_NOTES.md +147 -0
  289. package/src/components/Switch/Switch.module.css +346 -0
  290. package/src/components/Switch/Switch.stories.tsx +114 -0
  291. package/src/components/Switch/Switch.test.tsx +1 -0
  292. package/src/components/Switch/Switch.tsx +294 -0
  293. package/src/components/Switch/SwitchGroup.stories.tsx +132 -0
  294. package/src/components/Switch/SwitchGroup.tsx +156 -0
  295. package/src/components/Switch/USAGE.md +36 -0
  296. package/src/components/Switch/index.ts +2 -0
  297. package/src/components/Table/TABLE_IMPLEMENTATION_NOTES.md +75 -0
  298. package/src/components/Table/Table.module.css +462 -0
  299. package/src/components/Table/Table.stories.tsx +154 -0
  300. package/src/components/Table/Table.test.tsx +1 -0
  301. package/src/components/Table/Table.tsx +250 -0
  302. package/src/components/Table/USAGE.md +90 -0
  303. package/src/components/Table/index.ts +1 -0
  304. package/src/components/Tabs/IMPLEMENTATION_NOTES.md +76 -0
  305. package/src/components/Tabs/Tabs.module.css +801 -0
  306. package/src/components/Tabs/Tabs.stories.tsx +174 -0
  307. package/src/components/Tabs/Tabs.test.tsx +1 -0
  308. package/src/components/Tabs/Tabs.tsx +103 -0
  309. package/src/components/Tabs/USAGE.md +61 -0
  310. package/src/components/Tabs/index.ts +1 -0
  311. package/src/components/Text/TEXT_IMPLEMENTATION_NOTES.md +10 -0
  312. package/src/components/Text/Text.stories.tsx +75 -0
  313. package/src/components/Text/Text.test.tsx +1 -0
  314. package/src/components/Text/Text.tsx +19 -0
  315. package/src/components/Text/USAGE.md +40 -0
  316. package/src/components/Text/index.ts +1 -0
  317. package/src/components/TextArea/TEXTAREA_IMPLEMENTATION_NOTES.md +42 -0
  318. package/src/components/TextArea/TextArea.module.css +203 -0
  319. package/src/components/TextArea/TextArea.stories.tsx +94 -0
  320. package/src/components/TextArea/TextArea.test.tsx +1 -0
  321. package/src/components/TextArea/TextArea.tsx +162 -0
  322. package/src/components/TextArea/USAGE.md +38 -0
  323. package/src/components/TextArea/index.ts +1 -0
  324. package/src/components/TextField/TextField.module.css +271 -0
  325. package/src/components/TextField/TextField.stories.tsx +162 -0
  326. package/src/components/TextField/TextField.test.tsx +1 -0
  327. package/src/components/TextField/TextField.tsx +182 -0
  328. package/src/components/TextField/USAGE.md +38 -0
  329. package/src/components/TextField/index.ts +1 -0
  330. package/src/components/TimePicker/TIMEPICKER_IMPLEMENTATION_NOTES.md +89 -0
  331. package/src/components/TimePicker/TimePicker.module.css +262 -0
  332. package/src/components/TimePicker/TimePicker.stories.tsx +155 -0
  333. package/src/components/TimePicker/TimePicker.test.tsx +1 -0
  334. package/src/components/TimePicker/TimePicker.tsx +277 -0
  335. package/src/components/TimePicker/USAGE.md +61 -0
  336. package/src/components/TimePicker/index.ts +1 -0
  337. package/src/components/Timeline/IMPLEMENTATION_NOTES.md +42 -0
  338. package/src/components/Timeline/Timeline.module.css +363 -0
  339. package/src/components/Timeline/Timeline.stories.tsx +128 -0
  340. package/src/components/Timeline/Timeline.test.tsx +1 -0
  341. package/src/components/Timeline/Timeline.tsx +90 -0
  342. package/src/components/Timeline/TimelineItem.tsx +95 -0
  343. package/src/components/Timeline/USAGE.md +41 -0
  344. package/src/components/Timeline/index.ts +2 -0
  345. package/src/components/Toast/TOAST_IMPLEMENTATION_NOTES.md +37 -0
  346. package/src/components/Toast/Toast.module.css +193 -0
  347. package/src/components/Toast/Toast.stories.tsx +67 -0
  348. package/src/components/Toast/Toast.test.tsx +1 -0
  349. package/src/components/Toast/Toast.tsx +121 -0
  350. package/src/components/Toast/USAGE.md +42 -0
  351. package/src/components/Toast/index.ts +1 -0
  352. package/src/components/Tooltip/Tooltip.module.css +83 -0
  353. package/src/components/Tooltip/Tooltip.stories.tsx +165 -0
  354. package/src/components/Tooltip/Tooltip.test.tsx +1 -0
  355. package/src/components/Tooltip/Tooltip.tsx +78 -0
  356. package/src/components/Tooltip/USAGE.md +40 -0
  357. package/src/components/Tooltip/index.ts +1 -0
  358. package/src/components/TransferList/TRANSFERLIST_IMPLEMENTATION_NOTES.md +140 -0
  359. package/src/components/TransferList/TransferList.module.css +174 -0
  360. package/src/components/TransferList/TransferList.stories.tsx +121 -0
  361. package/src/components/TransferList/TransferList.test.tsx +1 -0
  362. package/src/components/TransferList/TransferList.tsx +419 -0
  363. package/src/components/TransferList/USAGE.md +77 -0
  364. package/src/components/TransferList/index.ts +1 -0
  365. package/src/components/Tree/IMPLEMENTATION_NOTES.md +53 -0
  366. package/src/components/Tree/Tree.module.css +272 -0
  367. package/src/components/Tree/Tree.stories.tsx +104 -0
  368. package/src/components/Tree/Tree.test.tsx +1 -0
  369. package/src/components/Tree/Tree.tsx +298 -0
  370. package/src/components/Tree/USAGE.md +99 -0
  371. package/src/components/Tree/index.ts +1 -0
  372. package/src/components/Typography/TYPOGRAPHY_IMPLEMENTATION_NOTES.md +17 -0
  373. package/src/components/Typography/Typography.module.css +13 -0
  374. package/src/components/Typography/Typography.test.tsx +1 -0
  375. package/src/components/Typography/Typography.tsx +43 -0
  376. package/src/components/Typography/USAGE.md +40 -0
  377. package/src/components/Typography/index.ts +1 -0
  378. package/src/components/index.ts +50 -0
  379. package/src/env.d.ts +7 -0
  380. package/src/index.ts +194 -0
  381. package/src/types/index.ts +9 -0
  382. package/src/types/scss-modules.d.ts +9 -0
  383. package/src/utils/ColorSchemeWrapper.tsx +23 -0
  384. package/src/utils/RequireAccessibleLabel.ts +1 -0
  385. package/src/utils/copyToClipboard.ts +36 -0
  386. package/src/utils/filterStylingProps.test.ts +85 -0
  387. package/src/utils/filterStylingProps.ts +143 -0
  388. package/src/utils/index.ts +1 -0
  389. package/src/utils/renderRichOption.tsx +51 -0
@@ -0,0 +1,120 @@
1
+ # Stepper Implementation Notes
2
+
3
+ - **Compositional API Dropped:** Mantine manages stepper state and content via `<Stepper.Step>` and `<Stepper.Completed>`. MUI delegates content rendering to the developer and focuses purely on the stepper visual layout using `<Step>`, `<StepLabel>`, etc.
4
+ - **Monolithic API Adopted:** Following architectural review, we have abandoned the fabricated context wrappers for `adapter-mui-v7`. We now natively export `Stepper`, `Step`, `StepLabel`, `StepButton`, and `StepConnector` wrapping their `@mui/material` counterparts. Developers are expected to manage the active step logic and content rendering outside the `Stepper` component, consistent with MUI patterns. Storybook tests have been updated to reflect this divergence while retaining core visual compatibility.
5
+
6
+ ## Layout fixes (root-caused against mantine's visual reference)
7
+
8
+ Several parts of the original implementation used the correct-looking classes but wired
9
+ them to elements that never carry those classes at runtime, or copy-pasted comments/logic
10
+ from `mantine-adapter` that don't describe how MUI's Stepper actually works. Fixed:
11
+
12
+ - **Horizontal layout uses `alternativeLabel`:** MUI's own `Stepper` prop doc says
13
+ `alternativeLabel` positions the label under the icon — that's exactly Recursica's
14
+ horizontal layout, and it's also what makes `StepConnector`'s `alternativeLabel` variant
15
+ absolutely-position itself relative to each `Step`, centered on the icon. The adapter
16
+ previously never set this prop and instead tried to force column layout via CSS on
17
+ `Step`'s own root, which has no effect (`StepLabel`'s row-vs-column layout is driven
18
+ entirely by the `alternativeLabel` context flag, not by its parent's `flex-direction`).
19
+ Without it, labels rendered beside the icon (row layout) and the connector used the
20
+ non-`alternativeLabel` inline-flex positioning, both very visibly wrong.
21
+ - **Custom `StepIconComponent`:** MUI's default `StepIcon` draws its own self-contained
22
+ circle+check `CheckCircle` SVG (Material's `check_circle` glyph) whenever `completed` is
23
+ true, colored via `theme.palette.primary.main` (blue) — it never reads our tokens and its
24
+ SVG viewBox doesn't scale to `--stepper-indicator-size`. We now pass `RecursicaStepIcon`
25
+ (a plain span + our own inline check glyph, same convention as `Checkbox.tsx`'s `CheckIcon`)
26
+ so the token-driven circle (`.stepIconCircle`) is the only circle ever drawn, and the check
27
+ mark is sized via `--stepper-svg-size` and colored via the `completed-indicator-text` token.
28
+ - **`classes.labelContainer` was never mapped:** all of the `.stepBody` centering/max-width
29
+ CSS (copied verbatim from mantine, where `stepBody` is a real classNames key) was dead code
30
+ for MUI — `StepLabel` calls this slot `labelContainer`, not `stepBody`. Now mapped via
31
+ `classes={{ labelContainer: styles.stepBody }}`.
32
+ - **Vertical connecting line — real primitive doesn't fit, so it's drawn on `.stepIcon`:**
33
+ MUI's vertical `StepConnector` is a sibling with a fixed `minHeight: 24`; it can't stretch to
34
+ match a step's actual rendered height (e.g. a 2-line description), which is exactly why the
35
+ line floated disconnected from both circles. MUI's own answer to this is `StepContent`
36
+ (its `border-left` spans whatever height its content needs) — but Recursica intentionally
37
+ hides `.content` (steppers are structural-only, no per-step content in the DOM). Since
38
+ neither of MUI's two connecting-line primitives fits, the vertical connector is drawn as a
39
+ `.stepIcon::after` pseudo-element instead: `StepLabelRoot` gets `align-items: stretch` (a
40
+ real CSS stretch, not JS measurement) so `.stepIcon` (`iconContainer`) grows to match its
41
+ sibling label column's actual height, and the rail spans `top: indicator-size` down through
42
+ `bottom: calc(-1 * step-gap)` (the step's own padding-bottom, exactly reaching the next
43
+ step's icon). `Stepper.tsx` passes an empty `<></>` as the vertical `connector` since this
44
+ fully replaces its job. This requires zeroing MUI's own hardcoded
45
+ `StepLabelRoot` vertical `padding: 8px 0` (`.root.vertical .stepLabelRoot`) — leaving it in
46
+ place made the rail land 16px short of the next icon.
47
+ - **`:global()` was missing everywhere `.Mui-active`/`.Mui-completed`/`.MuiStepLabel-root` was
48
+ referenced:** in a CSS Module, a bare `.Mui-completed` selector gets scoped/hashed like any
49
+ other local class, so it silently never matches the real global class MUI stamps onto the
50
+ DOM (same pitfall documented in `Button.module.css`/`Switch.module.css` for `.Mui-disabled`/
51
+ `.Mui-checked`). This affected the label/description state-color rules (already present
52
+ before this fix) and the new separator/rail state-color rules — all now wrapped in
53
+ `:global(...)`. While fixing this, the description-color selectors were also corrected to
54
+ use `.stepBody:has(.stepLabel:global(.Mui-completed)) .stepDescription` — the prior
55
+ `:has(~ .Mui-completed)` could never match because `optional`/description renders _after_
56
+ the label in the DOM (not before), and `.MuiStepLabel-root.Mui-completed` could never match
57
+ because MUI only stamps the completed/active state class onto the `label`/`iconContainer`
58
+ slots, never onto `StepLabel`'s own root.
59
+
60
+ ## Source-of-truth audit fixes (2026-08-30)
61
+
62
+ - **Horizontal connector gap 16px too wide:** MUI's `.MuiStep-root` hardcodes `padding: 0 8px`
63
+ for horizontal steps. The `alternativeLabel` connector centers itself via `left: -50%; right:
64
+ 50%` relative to each `Step`'s _full_ box width, so that padding (8px from each of the two
65
+ neighboring steps) silently widened every gap by 16px beyond the real `stepBody` content width
66
+ (`--stepper-max-text-width`, 200px in both kits). This didn't show up as a broken-looking line
67
+ in isolation (the circle still visually sits on top of the connector, hiding the seam either
68
+ way — see below) but produced a cumulative rightward drift versus mantine's edge-to-edge gap
69
+ (174px vs. mantine's 158px) that grew step over step, which is what actually reads as "shifted
70
+ ~30px left" by the third step in a side-by-side comparison. Fixed by zeroing
71
+ `.root.horizontal .step`'s padding.
72
+ - **The MUI connector element is a center-to-center box hidden by the circle on top, not an
73
+ edge-to-edge box like mantine's:** confirmed via `getBoundingClientRect()` — MUI's connector
74
+ literally spans one circle's center to the next's (`left:-50%/right:50%` against each Step's
75
+ own width), with the `Step`'s own icon painted after it in DOM order so it opaquely covers the
76
+ half of the connector underneath each circle. Mantine's connector is a real `flex:1` box with
77
+ negative margins that trims it to true edge-to-edge. Both approaches render identically once
78
+ the step padding above is fixed (verified pixel-for-pixel via live screenshots) — not changed
79
+ further, since MUI's `alternativeLabel` primitive doesn't support an edge-to-edge box directly
80
+ and the visual result already matches.
81
+ - **`ui-kit-stepper--default`'s "Step N content" text belonged to the story, not the component:**
82
+ mui's `Stepper.stories.tsx` rendered an extra `<div>Step {active+1} content</div>` between the
83
+ `Stepper` and the Previous/Next buttons that mantine's equivalent story never had (mantine's
84
+ story passes no children to `Stepper.Step`, so its real `.content` region — hidden by both
85
+ kits' CSS anyway, see "Hide Content" above — stays empty). Removed the extra div from mui's
86
+ story; no component-level bug (mantine's `Stepper` isn't missing a content region — it was
87
+ never asked to render one here).
88
+ - **`Group`'s `gap`/margin-padding shorthand props silently multiplied by MUI's theme spacing
89
+ unit:** the stepper story's `<Group mt={24} justify="center" gap={8}>` expects literal pixels
90
+ (matching mantine's `Group`, which takes raw numbers as-is), but `adapter-mui-v7`'s `Group` passed
91
+ `gap` into `Stack`'s own `spacing` prop and spread `mt`/other margin-padding props straight onto
92
+ `Stack`'s system props — both are MUI spacing shorthands that multiply bare numbers by the
93
+ theme's 8px unit (`gap={8}` → 64px, `mt={24}` → 192px). This was the real cause of "Previous/
94
+ Next buttons spaced farther apart" and an oversized gap between the stepper and the button row.
95
+ Fixed in `Group.tsx`: numeric `gap`/`rowGap`/`columnGap` are now stringified to `px` and applied
96
+ via `sx.gap` directly (bypassing `Stack`'s `spacing` prop entirely), and numeric margin/padding
97
+ shorthand keys (`m`/`mt`/.../`py`) are stringified to `px` before being spread onto `Stack`.
98
+ This only affects call sites that pass bare numbers (none elsewhere in this package at the time
99
+ of this fix — `grep`ped for it) since string/token values were already unaffected.
100
+ - **`ui-kit-stepper--vertical` spacing too tight:** mantine's real per-step vertical spacing isn't
101
+ actually driven by our own `--stepper-step-gap` token at all — mantine/core's _native_,
102
+ unmodified `Stepper.Step` CSS (`node_modules/@mantine/core/styles/Stepper.css`) ships its own
103
+ `min-height: calc(icon-size + mantine-spacing-xl + separator-spacing)` (≈32px + ≈5px on top of
104
+ the icon), which dominates over our `--stepper-step-gap` (12px) padding since it's larger. This
105
+ is an incidental Mantine library default, not a Recursica token/design decision, but it's what
106
+ actually produces mantine's visible spacing — measured at exactly 79px icon-center-to-icon-
107
+ center vs. mui's un-patched 62.2px. Reproduced via `.root.vertical .step:not(:last-of-type) {
108
+ display: flex; min-height: calc(var(--stepper-indicator-size) + 2rem + 0.3125rem); }`
109
+ (`display: flex` is required too, not just `min-height` — without it, `.stepLabelRoot`'s
110
+ existing `align-items: stretch` has nothing taller to stretch to, so the extra height would sit
111
+ as dead space below the row instead of growing `.stepIcon` and, with it, the `.stepIcon::after`
112
+ rail's reach to the next circle). Excludes `:last-of-type`, matching mantine's own `:last-of-
113
+ type { min-height: auto }` reset. Verified via live `getBoundingClientRect()` on both kits:
114
+ icon-to-icon spacing now matches at 79px exactly.
115
+ - **Description color for completed/current steps was correctly implemented in this package** —
116
+ the visual difference reported against mantine's rendering turned out to be a mantine-adapter
117
+ bug (its `data-progress="completed"/"progress"/"pending"` value-matching selectors never
118
+ matched Mantine's real boolean-presence attributes), not a missing/wrong Recursica variable
119
+ here. See `mantine-adapter`'s own `Stepper/IMPLEMENTATION_NOTES.md`. No adapter-mui-v7 change was
120
+ needed for that item.
@@ -0,0 +1,474 @@
1
+ /*
2
+ Recursica Stepper CSS module natively binding to Figma variables.
3
+
4
+ ARCHITECTURE NOTES (see IMPLEMENTATION_NOTES.md for full rationale):
5
+ - Horizontal orientation uses MUI Stepper's own `alternativeLabel` prop (icon on
6
+ top, label centered below, connector absolutely positioned circle-to-circle) —
7
+ this is MUI's real primitive for this exact layout, not a custom column hack.
8
+ - The visible circle/checkmark is rendered by our own `RecursicaStepIcon`
9
+ (`.stepIconCircle` / `.stepCompletedIcon`) instead of MUI's default `StepIcon`,
10
+ which draws its own self-colored (blue) circle+check SVG that never reads
11
+ our tokens.
12
+ - Vertical orientation's connecting line is drawn as a `.stepIcon::after` rail
13
+ (not the `StepConnector` element — see Stepper.tsx) so its length tracks each
14
+ step's actual rendered height, matching mantine's absolutely-positioned
15
+ separator.
16
+
17
+ HARDCODED VALUES:
18
+ - `.stepIconCircle` sets `box-sizing: border-box` so the indicator's border is
19
+ included in `--stepper-indicator-size`, keeping the connector's centering math
20
+ (indicator-size / 2) exact.
21
+ - `--stepper-connector-size` is a local bridge custom property (not a design
22
+ token) used only to let the vertical rail's centering `calc()` reference
23
+ whichever connector-size token is active for the current state.
24
+ */
25
+
26
+ .root {
27
+ /* Orientation specific gaps are mapped via data attributes */
28
+ }
29
+
30
+ .root.horizontal .steps {
31
+ align-items: flex-start;
32
+ --stepper-step-gap: var(
33
+ --recursica_ui-kit_components_stepper_variants_orientation_horizontal_properties_step-gap
34
+ );
35
+ --stepper-max-text-width: var(
36
+ --recursica_ui-kit_components_stepper_variants_orientation_horizontal_properties_max-text-width
37
+ );
38
+ }
39
+
40
+ .root.horizontal .step {
41
+ /* MUI's own `.MuiStep-root` hardcodes `padding: 0 8px` for horizontal Steps.
42
+ The alternativeLabel connector centers itself via `left: -50%; right: 50%`
43
+ relative to each Step's full box width, so this padding silently widened
44
+ every gap by 16px (8px from each neighboring Step) beyond the real
45
+ `stepBody` content width (--stepper-max-text-width), drifting the
46
+ connector length away from mantine's edge-to-edge gap. */
47
+ padding: 0;
48
+ }
49
+
50
+ .root.horizontal .stepBody {
51
+ width: var(--stepper-max-text-width);
52
+ display: flex;
53
+ flex-direction: column;
54
+ align-items: center;
55
+ justify-content: flex-start;
56
+ gap: var(
57
+ --recursica_ui-kit_components_stepper_variants_orientation_horizontal_properties_label-description-gap
58
+ );
59
+ }
60
+
61
+ .root.horizontal .stepLabel,
62
+ .root.horizontal .stepDescription {
63
+ width: max-content;
64
+ max-width: var(--stepper-max-text-width);
65
+ text-align: center;
66
+ white-space: normal;
67
+ }
68
+
69
+ .root.horizontal .stepLabel {
70
+ /* Replaces MUI's own hardcoded `margin-top: 16px` (applied via its
71
+ `.Mui-alternativeLabel` state class) with the real indicator-label-gap token. */
72
+ margin-top: var(
73
+ --recursica_ui-kit_components_stepper_variants_orientation_horizontal_properties_indicator-label-gap
74
+ );
75
+ }
76
+
77
+ .root.horizontal .separator {
78
+ /* Root only positions the connector; MUI's own `alternativeLabel` variant
79
+ already sets `position: absolute`. Centering is exact because our custom
80
+ StepIconComponent renders a `--stepper-indicator-size` circle flush at the
81
+ top of `.stepIcon`, centered horizontally within the step. */
82
+ top: calc(var(--stepper-indicator-size) / 2);
83
+ left: -50%;
84
+ right: 50%;
85
+ }
86
+
87
+ .root.horizontal .separatorLine {
88
+ border-top: none; /* replace MUI's default border-top line with a token-driven bar */
89
+ height: var(
90
+ --recursica_ui-kit_components_stepper_properties_upcoming-connector-size
91
+ );
92
+ background-color: var(
93
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-connector-color
94
+ );
95
+ }
96
+
97
+ .root.horizontal .separator:global(.Mui-active) .separatorLine,
98
+ .root.horizontal .separator:global(.Mui-completed) .separatorLine {
99
+ height: var(
100
+ --recursica_ui-kit_components_stepper_properties_completed-connector-size
101
+ );
102
+ background-color: var(
103
+ --recursica_ui-kit_components_stepper_properties_colors_completed-connector-color
104
+ );
105
+ }
106
+
107
+ /* Vertical Orientation */
108
+ .root.vertical {
109
+ --stepper-step-gap: var(
110
+ --recursica_ui-kit_components_stepper_variants_orientation_vertical_properties_step-gap
111
+ );
112
+ --stepper-max-text-width: var(
113
+ --recursica_ui-kit_components_stepper_variants_orientation_vertical_properties_max-text-width
114
+ );
115
+ }
116
+
117
+ .root.vertical .step {
118
+ /* Moves the gap inside the step (instead of a margin between steps) so the
119
+ `.stepIcon::after` rail can extend through it into the next step. */
120
+ padding-bottom: var(--stepper-step-gap);
121
+ }
122
+
123
+ .root.vertical .step:not(:last-of-type) {
124
+ /* Mantine's own `Stepper.Step` (mantine/core's native, unmodified CSS) ships
125
+ a hardcoded `min-height: icon-size + mantine-spacing-xl + separator-spacing`
126
+ (~32px + ~5px on top of the icon) that isn't tied to any Recursica token —
127
+ it's an incidental library default, not a design decision — but it's what
128
+ actually governs mantine's real per-step vertical spacing, independent of
129
+ (and larger than) the `--stepper-step-gap` token's own value. MUI has no
130
+ such native default, so without reproducing it here every vertical step
131
+ renders visibly tighter than mantine's. Matches mantine's own `:last-of-
132
+ type { min-height: auto }` reset by excluding the last step.
133
+
134
+ `display: flex` (Step is `display: block` by default) is required so this
135
+ min-height actually reaches the icon/rail: `.stepLabelRoot`'s existing
136
+ `align-items: stretch` only stretches its flex children to *its own* box
137
+ height, and without this, `.stepLabelRoot` itself would just sit at its
138
+ natural (smaller) content height inside the taller `.step`, leaving the
139
+ `.stepIcon::after` rail exactly as short as it was before this rule. */
140
+ display: flex;
141
+ min-height: calc(var(--stepper-indicator-size) + 2rem + 0.3125rem);
142
+ }
143
+
144
+ .root.vertical .step:last-of-type {
145
+ padding-bottom: 0;
146
+ }
147
+
148
+ .root.vertical .stepBody {
149
+ gap: var(
150
+ --recursica_ui-kit_components_stepper_variants_orientation_vertical_properties_label-description-gap
151
+ );
152
+ }
153
+
154
+ .root.vertical .stepLabelRoot {
155
+ /* Lets the icon column (`.stepIcon`) stretch to match the label column's
156
+ actual rendered height (multi-line descriptions included), so the
157
+ connecting rail's length always reaches the next step's icon. */
158
+ align-items: stretch;
159
+ /* Replaces MUI's own hardcoded `padding: 8px 0` for vertical orientation —
160
+ without zeroing this, the rail falls 16px short of the next icon (8px
161
+ here + 8px on the next step's own StepLabelRoot). */
162
+ padding: 0;
163
+ }
164
+
165
+ .root.vertical .stepIcon {
166
+ height: auto;
167
+ /* Replaces MUI's own hardcoded `padding-right: 8px` on the icon container. */
168
+ padding-right: var(
169
+ --recursica_ui-kit_components_stepper_variants_orientation_vertical_properties_indicator-label-gap
170
+ );
171
+ --stepper-connector-size: var(
172
+ --recursica_ui-kit_components_stepper_properties_upcoming-connector-size
173
+ );
174
+ }
175
+
176
+ .root.vertical .step:global(.Mui-completed) .stepIcon {
177
+ --stepper-connector-size: var(
178
+ --recursica_ui-kit_components_stepper_properties_completed-connector-size
179
+ );
180
+ }
181
+
182
+ .root.vertical .step:not(:last-of-type) .stepIcon::after {
183
+ content: "";
184
+ position: absolute;
185
+ top: var(--stepper-indicator-size);
186
+ bottom: calc(-1 * var(--stepper-step-gap));
187
+ left: calc(50% - (var(--stepper-connector-size) / 2));
188
+ width: var(--stepper-connector-size);
189
+ background-color: var(
190
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-connector-color
191
+ );
192
+ }
193
+
194
+ .root.vertical
195
+ .step:global(.Mui-completed):not(:last-of-type)
196
+ .stepIcon::after {
197
+ background-color: var(
198
+ --recursica_ui-kit_components_stepper_properties_colors_completed-connector-color
199
+ );
200
+ }
201
+
202
+ /* Sizes */
203
+ .large {
204
+ --stepper-icon-size: var(
205
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_indicator-size
206
+ ); /* Maps to Mantine's circle size */
207
+ --stepper-indicator-size: var(
208
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_indicator-size
209
+ );
210
+ --stepper-border-size: var(
211
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_indicator-border-size
212
+ );
213
+ --stepper-border-radius: var(
214
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_indicator-border-radius
215
+ );
216
+ --stepper-font-family: var(
217
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_font-family
218
+ );
219
+ --stepper-font-size: var(
220
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_font-size
221
+ );
222
+ --stepper-font-style: var(
223
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_font-style
224
+ );
225
+ --stepper-font-weight: var(
226
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_font-weight
227
+ );
228
+ --stepper-letter-spacing: var(
229
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_letter-spacing
230
+ );
231
+ --stepper-line-height: var(
232
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_line-height
233
+ );
234
+ --stepper-text-decoration: var(
235
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_text-decoration
236
+ );
237
+ --stepper-text-transform: var(
238
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_text-transform
239
+ );
240
+ --stepper-svg-size: var(
241
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_completed-icon-size
242
+ );
243
+ }
244
+
245
+ .small {
246
+ --stepper-icon-size: var(
247
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_indicator-size
248
+ ); /* Maps to Mantine's circle size */
249
+ --stepper-indicator-size: var(
250
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_indicator-size
251
+ );
252
+ --stepper-border-size: var(
253
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_indicator-border-size
254
+ );
255
+ --stepper-border-radius: var(
256
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_indicator-border-radius
257
+ );
258
+ --stepper-font-family: var(
259
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_font-family
260
+ );
261
+ --stepper-font-size: var(
262
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_font-size
263
+ );
264
+ --stepper-font-style: var(
265
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_font-style
266
+ );
267
+ --stepper-font-weight: var(
268
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_font-weight
269
+ );
270
+ --stepper-letter-spacing: var(
271
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_letter-spacing
272
+ );
273
+ --stepper-line-height: var(
274
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_line-height
275
+ );
276
+ --stepper-text-decoration: var(
277
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_text-decoration
278
+ );
279
+ --stepper-text-transform: var(
280
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_text-transform
281
+ );
282
+ --stepper-svg-size: var(
283
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_completed-icon-size
284
+ );
285
+ }
286
+
287
+ /* Core Element Structuring using mapped variables */
288
+ .root .stepBody {
289
+ max-width: var(--stepper-max-text-width);
290
+ display: flex;
291
+ flex-direction: column;
292
+ }
293
+
294
+ .root .stepLabel {
295
+ font-family: var(
296
+ --recursica_ui-kit_components_stepper_properties_label-text_font-family
297
+ );
298
+ font-size: var(
299
+ --recursica_ui-kit_components_stepper_properties_label-text_font-size
300
+ );
301
+ font-style: var(
302
+ --recursica_ui-kit_components_stepper_properties_label-text_font-style
303
+ );
304
+ font-weight: var(
305
+ --recursica_ui-kit_components_stepper_properties_label-text_font-weight
306
+ );
307
+ letter-spacing: var(
308
+ --recursica_ui-kit_components_stepper_properties_label-text_letter-spacing
309
+ );
310
+ line-height: var(
311
+ --recursica_ui-kit_components_stepper_properties_label-text_line-height
312
+ );
313
+ text-decoration: var(
314
+ --recursica_ui-kit_components_stepper_properties_label-text_text-decoration
315
+ );
316
+ text-transform: var(
317
+ --recursica_ui-kit_components_stepper_properties_label-text_text-transform
318
+ );
319
+ }
320
+
321
+ .root .stepDescription {
322
+ font-family: var(
323
+ --recursica_ui-kit_components_stepper_properties_description-text_font-family
324
+ );
325
+ font-size: var(
326
+ --recursica_ui-kit_components_stepper_properties_description-text_font-size
327
+ );
328
+ font-style: var(
329
+ --recursica_ui-kit_components_stepper_properties_description-text_font-style
330
+ );
331
+ font-weight: var(
332
+ --recursica_ui-kit_components_stepper_properties_description-text_font-weight
333
+ );
334
+ letter-spacing: var(
335
+ --recursica_ui-kit_components_stepper_properties_description-text_letter-spacing
336
+ );
337
+ line-height: var(
338
+ --recursica_ui-kit_components_stepper_properties_description-text_line-height
339
+ );
340
+ text-decoration: var(
341
+ --recursica_ui-kit_components_stepper_properties_description-text_text-decoration
342
+ );
343
+ text-transform: var(
344
+ --recursica_ui-kit_components_stepper_properties_description-text_text-transform
345
+ );
346
+ }
347
+
348
+ /* `.stepIcon` (MUI's `iconContainer` slot) is a layout host only — it never
349
+ renders the visible circle itself, so it can stretch (vertical) without
350
+ distorting it. The circle is `.stepIconCircle`, rendered by our own
351
+ `RecursicaStepIcon` (see Stepper.tsx). */
352
+ .root .stepIcon {
353
+ display: flex;
354
+ flex-direction: column;
355
+ align-items: center;
356
+ justify-content: flex-start;
357
+ position: relative;
358
+ width: var(--stepper-indicator-size);
359
+ flex-shrink: 0;
360
+ }
361
+
362
+ .root .stepIconCircle {
363
+ box-sizing: border-box; /* HARDCODE: keep indicator-size math exact incl. border */
364
+ width: var(--stepper-indicator-size);
365
+ height: var(--stepper-indicator-size);
366
+ min-width: var(--stepper-indicator-size);
367
+ min-height: var(--stepper-indicator-size);
368
+ border-style: solid; /* HARDCODE: plain span has no default border-style */
369
+ border-width: var(--stepper-border-size);
370
+ border-radius: 50%; /* Override Figma token to ensure perfectly circular indicators */
371
+
372
+ font-family: var(--stepper-font-family);
373
+ font-size: var(--stepper-font-size);
374
+ font-style: var(--stepper-font-style);
375
+ font-weight: var(--stepper-font-weight);
376
+ letter-spacing: var(--stepper-letter-spacing);
377
+ line-height: var(--stepper-line-height);
378
+ text-decoration: var(--stepper-text-decoration);
379
+ text-transform: var(--stepper-text-transform);
380
+
381
+ display: flex;
382
+ align-items: center;
383
+ justify-content: center;
384
+ /* Upcoming State (Pending) - Default */
385
+ background-color: var(
386
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-indicator-background-color
387
+ );
388
+ border-color: var(
389
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-indicator-border-color
390
+ );
391
+ color: var(
392
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-indicator-text
393
+ );
394
+ }
395
+
396
+ /* Completed State */
397
+ .root .stepIconCircle[data-completed] {
398
+ background-color: var(
399
+ --recursica_ui-kit_components_stepper_properties_colors_completed-indicator-background-color
400
+ );
401
+ border-color: var(
402
+ --recursica_ui-kit_components_stepper_properties_colors_completed-indicator-border-color
403
+ );
404
+ }
405
+
406
+ .root .stepCompletedIcon {
407
+ width: var(--stepper-svg-size);
408
+ height: var(--stepper-svg-size);
409
+ color: var(
410
+ --recursica_ui-kit_components_stepper_properties_colors_completed-indicator-text
411
+ );
412
+ }
413
+
414
+ .root .stepLabel:global(.Mui-completed) {
415
+ color: var(
416
+ --recursica_ui-kit_components_stepper_properties_colors_completed-label-color
417
+ );
418
+ }
419
+
420
+ .root .stepBody:has(.stepLabel:global(.Mui-completed)) .stepDescription {
421
+ color: var(
422
+ --recursica_ui-kit_components_stepper_properties_colors_completed-description-color
423
+ );
424
+ }
425
+
426
+ /* Current State (Progressing) */
427
+ .root .stepIconCircle[data-active] {
428
+ background-color: var(
429
+ --recursica_ui-kit_components_stepper_properties_colors_current-indicator-background-color
430
+ );
431
+ border-color: var(
432
+ --recursica_ui-kit_components_stepper_properties_colors_current-indicator-border-color
433
+ );
434
+ color: var(
435
+ --recursica_ui-kit_components_stepper_properties_colors_current-indicator-text
436
+ );
437
+ }
438
+
439
+ .root .stepLabel:global(.Mui-active) {
440
+ color: var(
441
+ --recursica_ui-kit_components_stepper_properties_colors_current-label-color
442
+ );
443
+ }
444
+
445
+ .root .stepBody:has(.stepLabel:global(.Mui-active)) .stepDescription {
446
+ color: var(
447
+ --recursica_ui-kit_components_stepper_properties_colors_current-description-color
448
+ );
449
+ }
450
+
451
+ /* Upcoming State (Pending Labels) */
452
+ .root .stepLabel:not(:global(.Mui-active)):not(:global(.Mui-completed)) {
453
+ color: var(
454
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-label-color
455
+ );
456
+ }
457
+
458
+ .root
459
+ .stepBody:not(:has(.stepLabel:global(.Mui-active))):not(
460
+ :has(.stepLabel:global(.Mui-completed))
461
+ )
462
+ .stepDescription {
463
+ color: var(
464
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-description-color
465
+ );
466
+ }
467
+
468
+ /* Hide Content
469
+ Recursica Steppers are purely navigational/structural. Content should be managed
470
+ by the parent layout outside of the Stepper DOM.
471
+ */
472
+ .root .content {
473
+ display: none;
474
+ }