@recursica/adapter-mantine-v8 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 (362) hide show
  1. package/.storybook/commonArgTypes.ts +148 -0
  2. package/ARCHITECTURE.md +18 -0
  3. package/CHANGELOG.md +688 -0
  4. package/LICENSE +21 -0
  5. package/OVERSTYLING.md +56 -0
  6. package/README.md +70 -0
  7. package/SETUP.md +93 -0
  8. package/USAGE.md +57 -0
  9. package/dist/adapter-mantine-v8.cjs +12 -0
  10. package/dist/adapter-mantine-v8.cjs.map +1 -0
  11. package/dist/adapter-mantine-v8.css +1 -0
  12. package/dist/adapter-mantine-v8.js +5759 -0
  13. package/dist/adapter-mantine-v8.js.map +1 -0
  14. package/dist/index.d.ts +2095 -0
  15. package/dist/test.html +1 -0
  16. package/dist/vite.svg +1 -0
  17. package/docs/PHILOSOPHY.md +39 -0
  18. package/llms.txt +74 -0
  19. package/package.json +131 -0
  20. package/recursica_brand.json +2677 -0
  21. package/recursica_tokens.json +799 -0
  22. package/recursica_ui-kit.json +14981 -0
  23. package/recursica_variables_scoped.css +30489 -0
  24. package/src/GlobalExemptions.modules.css +7 -0
  25. package/src/Introduction.stories.tsx +154 -0
  26. package/src/OverStyling.tsx +79 -0
  27. package/src/Version.tsx +44 -0
  28. package/src/components/Accordion/ACCORDION_IMPLEMENTATION_NOTES.md +72 -0
  29. package/src/components/Accordion/Accordion.module.css +367 -0
  30. package/src/components/Accordion/Accordion.stories.tsx +189 -0
  31. package/src/components/Accordion/Accordion.test.tsx +1 -0
  32. package/src/components/Accordion/Accordion.tsx +220 -0
  33. package/src/components/Accordion/USAGE.md +51 -0
  34. package/src/components/Accordion/index.ts +1 -0
  35. package/src/components/AssistiveElement/ASSISTIVEELEMENT_IMPLEMENTATION_NOTES.md +45 -0
  36. package/src/components/AssistiveElement/AssistiveElement.module.css +111 -0
  37. package/src/components/AssistiveElement/AssistiveElement.stories.tsx +68 -0
  38. package/src/components/AssistiveElement/AssistiveElement.test.tsx +1 -0
  39. package/src/components/AssistiveElement/AssistiveElement.tsx +93 -0
  40. package/src/components/AssistiveElement/USAGE.md +36 -0
  41. package/src/components/AutoComplete/AUTOCOMPLETE_IMPLEMENTATION_NOTES.md +42 -0
  42. package/src/components/AutoComplete/AutoComplete.module.css +430 -0
  43. package/src/components/AutoComplete/AutoComplete.stories.tsx +336 -0
  44. package/src/components/AutoComplete/AutoComplete.test.tsx +1 -0
  45. package/src/components/AutoComplete/AutoComplete.tsx +179 -0
  46. package/src/components/AutoComplete/USAGE.md +80 -0
  47. package/src/components/Avatar/AVATAR_IMPLEMENTATION_NOTES.md +34 -0
  48. package/src/components/Avatar/Avatar.module.css +336 -0
  49. package/src/components/Avatar/Avatar.stories.tsx +92 -0
  50. package/src/components/Avatar/Avatar.test.tsx +1 -0
  51. package/src/components/Avatar/Avatar.tsx +108 -0
  52. package/src/components/Avatar/USAGE.md +38 -0
  53. package/src/components/Avatar/index.ts +1 -0
  54. package/src/components/Badge/BADGE_IMPLEMENTATION_NOTES.md +18 -0
  55. package/src/components/Badge/Badge.module.css +127 -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 +64 -0
  59. package/src/components/Badge/USAGE.md +56 -0
  60. package/src/components/Breadcrumb/BREADCRUMB_IMPLEMENTATION_NOTES.md +47 -0
  61. package/src/components/Breadcrumb/Breadcrumb.module.css +48 -0
  62. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +114 -0
  63. package/src/components/Breadcrumb/Breadcrumb.test.tsx +1 -0
  64. package/src/components/Breadcrumb/Breadcrumb.tsx +85 -0
  65. package/src/components/Breadcrumb/USAGE.md +55 -0
  66. package/src/components/Breadcrumb/markCurrentPageItem.test.ts +49 -0
  67. package/src/components/Button/Button.module.css +446 -0
  68. package/src/components/Button/Button.stories.tsx +196 -0
  69. package/src/components/Button/Button.styleIsolation.dom.test.tsx +98 -0
  70. package/src/components/Button/Button.tsx +184 -0
  71. package/src/components/Button/IMPLEMENTATION_NOTES.md +109 -0
  72. package/src/components/Button/USAGE.md +80 -0
  73. package/src/components/Button/index.ts +1 -0
  74. package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +17 -0
  75. package/src/components/Card/Card.module.css +119 -0
  76. package/src/components/Card/Card.stories.tsx +131 -0
  77. package/src/components/Card/Card.test.tsx +1 -0
  78. package/src/components/Card/Card.tsx +248 -0
  79. package/src/components/Card/USAGE.md +63 -0
  80. package/src/components/Checkbox/CHECKBOX_IMPLEMENTATION_NOTES.md +25 -0
  81. package/src/components/Checkbox/Checkbox.module.css +267 -0
  82. package/src/components/Checkbox/Checkbox.stories.tsx +97 -0
  83. package/src/components/Checkbox/Checkbox.test.tsx +1 -0
  84. package/src/components/Checkbox/Checkbox.tsx +151 -0
  85. package/src/components/Checkbox/CheckboxGroup.stories.tsx +139 -0
  86. package/src/components/Checkbox/CheckboxGroup.tsx +147 -0
  87. package/src/components/Checkbox/USAGE.md +48 -0
  88. package/src/components/Chip/CHIP_IMPLEMENTATION_NOTES.md +110 -0
  89. package/src/components/Chip/Chip.module.css +288 -0
  90. package/src/components/Chip/Chip.stories.tsx +128 -0
  91. package/src/components/Chip/Chip.test.tsx +1 -0
  92. package/src/components/Chip/Chip.tsx +157 -0
  93. package/src/components/Chip/USAGE.md +55 -0
  94. package/src/components/Container/CONTAINER_IMPLEMENTATION_NOTES.md +4 -0
  95. package/src/components/Container/Container.module.css +7 -0
  96. package/src/components/Container/Container.stories.tsx +118 -0
  97. package/src/components/Container/Container.test.tsx +1 -0
  98. package/src/components/Container/Container.tsx +69 -0
  99. package/src/components/Container/USAGE.md +47 -0
  100. package/src/components/DatePicker/DATEPICKER_IMPLEMENTATION_NOTES.md +31 -0
  101. package/src/components/DatePicker/DatePicker.icons.tsx +27 -0
  102. package/src/components/DatePicker/DatePicker.module.css +566 -0
  103. package/src/components/DatePicker/DatePicker.stories.tsx +158 -0
  104. package/src/components/DatePicker/DatePicker.test.tsx +1 -0
  105. package/src/components/DatePicker/DatePicker.tsx +218 -0
  106. package/src/components/DatePicker/USAGE.md +49 -0
  107. package/src/components/Dropdown/BareDropdown.tsx +97 -0
  108. package/src/components/Dropdown/DROPDOWN_IMPLEMENTATION_NOTES.md +12 -0
  109. package/src/components/Dropdown/Dropdown.module.css +477 -0
  110. package/src/components/Dropdown/Dropdown.stories.tsx +252 -0
  111. package/src/components/Dropdown/Dropdown.test.tsx +1 -0
  112. package/src/components/Dropdown/Dropdown.tsx +213 -0
  113. package/src/components/Dropdown/USAGE.md +69 -0
  114. package/src/components/FileInput/FILEINPUT_IMPLEMENTATION_NOTES.md +153 -0
  115. package/src/components/FileInput/FileInput.module.css +280 -0
  116. package/src/components/FileInput/FileInput.stories.tsx +313 -0
  117. package/src/components/FileInput/FileInput.test.tsx +1 -0
  118. package/src/components/FileInput/FileInput.tsx +417 -0
  119. package/src/components/FileInput/USAGE.md +145 -0
  120. package/src/components/FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md +244 -0
  121. package/src/components/FileUpload/FileUpload.module.css +205 -0
  122. package/src/components/FileUpload/FileUpload.stories.tsx +362 -0
  123. package/src/components/FileUpload/FileUpload.test.tsx +1 -0
  124. package/src/components/FileUpload/FileUpload.tsx +354 -0
  125. package/src/components/FileUpload/USAGE.md +199 -0
  126. package/src/components/Flex/FLEX_IMPLEMENTATION_NOTES.md +4 -0
  127. package/src/components/Flex/Flex.module.css +7 -0
  128. package/src/components/Flex/Flex.stories.tsx +128 -0
  129. package/src/components/Flex/Flex.test.tsx +1 -0
  130. package/src/components/Flex/Flex.tsx +75 -0
  131. package/src/components/Flex/USAGE.md +48 -0
  132. package/src/components/FormControlLayout/FormControlLayout.module.css +90 -0
  133. package/src/components/FormControlLayout/FormControlLayout.stories.tsx +118 -0
  134. package/src/components/FormControlLayout/FormControlLayout.test.tsx +1 -0
  135. package/src/components/FormControlLayout/FormControlLayout.tsx +74 -0
  136. package/src/components/FormControlLayout/USAGE.md +40 -0
  137. package/src/components/FormControlWrapper/FORMCONTROLWRAPPER_IMPLEMENTATION_NOTES.md +32 -0
  138. package/src/components/FormControlWrapper/FormControlWrapper.module.css +75 -0
  139. package/src/components/FormControlWrapper/FormControlWrapper.stories.tsx +129 -0
  140. package/src/components/FormControlWrapper/FormControlWrapper.test.tsx +1 -0
  141. package/src/components/FormControlWrapper/FormControlWrapper.tsx +151 -0
  142. package/src/components/FormControlWrapper/USAGE.md +47 -0
  143. package/src/components/Grid/GRID_IMPLEMENTATION_NOTES.md +18 -0
  144. package/src/components/Grid/Grid.module.css +11 -0
  145. package/src/components/Grid/Grid.stories.tsx +206 -0
  146. package/src/components/Grid/Grid.test.tsx +1 -0
  147. package/src/components/Grid/Grid.tsx +140 -0
  148. package/src/components/Grid/USAGE.md +47 -0
  149. package/src/components/Group/GROUP_IMPLEMENTATION_NOTES.md +4 -0
  150. package/src/components/Group/Group.module.css +7 -0
  151. package/src/components/Group/Group.stories.tsx +120 -0
  152. package/src/components/Group/Group.test.tsx +1 -0
  153. package/src/components/Group/Group.tsx +60 -0
  154. package/src/components/Group/USAGE.md +48 -0
  155. package/src/components/Heading/HEADING_IMPLEMENTATION_NOTES.md +18 -0
  156. package/src/components/Heading/Heading.module.css +13 -0
  157. package/src/components/Heading/Heading.stories.tsx +50 -0
  158. package/src/components/Heading/Heading.test.tsx +1 -0
  159. package/src/components/Heading/Heading.tsx +52 -0
  160. package/src/components/Heading/USAGE.md +36 -0
  161. package/src/components/HoverCard/HOVERCARD_IMPLEMENTATION_NOTES.md +77 -0
  162. package/src/components/HoverCard/HoverCard.module.css +90 -0
  163. package/src/components/HoverCard/HoverCard.stories.tsx +172 -0
  164. package/src/components/HoverCard/HoverCard.test.tsx +1 -0
  165. package/src/components/HoverCard/HoverCard.tsx +133 -0
  166. package/src/components/HoverCard/USAGE.md +52 -0
  167. package/src/components/Label/LABEL_IMPLEMENTATION_NOTES.md +48 -0
  168. package/src/components/Label/Label.module.css +141 -0
  169. package/src/components/Label/Label.stories.tsx +131 -0
  170. package/src/components/Label/Label.test.tsx +1 -0
  171. package/src/components/Label/Label.tsx +113 -0
  172. package/src/components/Label/USAGE.md +47 -0
  173. package/src/components/Label/index.ts +1 -0
  174. package/src/components/Layer/USAGE.md +54 -0
  175. package/src/components/Link/IMPLEMENTATION_NOTES.md +19 -0
  176. package/src/components/Link/Link.module.css +110 -0
  177. package/src/components/Link/Link.stories.tsx +58 -0
  178. package/src/components/Link/Link.test.tsx +1 -0
  179. package/src/components/Link/Link.tsx +67 -0
  180. package/src/components/Link/USAGE.md +56 -0
  181. package/src/components/Link/index.ts +1 -0
  182. package/src/components/Loader/LOADER_IMPLEMENTATION_NOTES.md +24 -0
  183. package/src/components/Loader/Loader.animate.dom.test.tsx +82 -0
  184. package/src/components/Loader/Loader.module.css +63 -0
  185. package/src/components/Loader/Loader.stories.tsx +123 -0
  186. package/src/components/Loader/Loader.test.tsx +1 -0
  187. package/src/components/Loader/Loader.tsx +69 -0
  188. package/src/components/Loader/USAGE.md +44 -0
  189. package/src/components/Menu/MENU_IMPLEMENTATION_NOTES.md +88 -0
  190. package/src/components/Menu/Menu.module.css +280 -0
  191. package/src/components/Menu/Menu.stories.tsx +371 -0
  192. package/src/components/Menu/Menu.test.tsx +1 -0
  193. package/src/components/Menu/Menu.tsx +373 -0
  194. package/src/components/Menu/USAGE.md +55 -0
  195. package/src/components/Modal/MODAL_IMPLEMENTATION_NOTES.md +32 -0
  196. package/src/components/Modal/Modal.module.css +302 -0
  197. package/src/components/Modal/Modal.stories.tsx +105 -0
  198. package/src/components/Modal/Modal.test.tsx +1 -0
  199. package/src/components/Modal/Modal.tsx +368 -0
  200. package/src/components/Modal/USAGE.md +58 -0
  201. package/src/components/Modal/index.ts +1 -0
  202. package/src/components/NumberInput/NUMBER_INPUT_IMPLEMENTATION_NOTES.md +24 -0
  203. package/src/components/NumberInput/NumberInput.module.css +302 -0
  204. package/src/components/NumberInput/NumberInput.stories.tsx +96 -0
  205. package/src/components/NumberInput/NumberInput.test.tsx +1 -0
  206. package/src/components/NumberInput/NumberInput.tsx +157 -0
  207. package/src/components/NumberInput/USAGE.md +52 -0
  208. package/src/components/Pagination/IMPLEMENTATION_NOTES.md +16 -0
  209. package/src/components/Pagination/Pagination.icons.tsx +66 -0
  210. package/src/components/Pagination/Pagination.module.css +188 -0
  211. package/src/components/Pagination/Pagination.stories.tsx +48 -0
  212. package/src/components/Pagination/Pagination.test.tsx +1 -0
  213. package/src/components/Pagination/Pagination.tsx +265 -0
  214. package/src/components/Pagination/USAGE.md +36 -0
  215. package/src/components/Pagination/index.ts +5 -0
  216. package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +116 -0
  217. package/src/components/Panel/Panel.module.css +209 -0
  218. package/src/components/Panel/Panel.stories.tsx +227 -0
  219. package/src/components/Panel/Panel.test.tsx +1 -0
  220. package/src/components/Panel/Panel.tsx +269 -0
  221. package/src/components/Panel/USAGE.md +56 -0
  222. package/src/components/Popover/IMPLEMENTATION_NOTES.md +77 -0
  223. package/src/components/Popover/Popover.module.css +86 -0
  224. package/src/components/Popover/Popover.stories.tsx +133 -0
  225. package/src/components/Popover/Popover.test.tsx +1 -0
  226. package/src/components/Popover/Popover.tsx +142 -0
  227. package/src/components/Popover/USAGE.md +61 -0
  228. package/src/components/Popover/index.ts +1 -0
  229. package/src/components/Radio/Radio.module.css +231 -0
  230. package/src/components/Radio/Radio.stories.tsx +93 -0
  231. package/src/components/Radio/Radio.test.tsx +1 -0
  232. package/src/components/Radio/Radio.tsx +168 -0
  233. package/src/components/Radio/RadioGroup.stories.tsx +117 -0
  234. package/src/components/Radio/RadioGroup.tsx +124 -0
  235. package/src/components/Radio/USAGE.md +36 -0
  236. package/src/components/ReadOnlyField/READ_ONLY_FIELD_IMPLEMENTATION_NOTES.md +15 -0
  237. package/src/components/ReadOnlyField/ReadOnlyBooleanField.tsx +21 -0
  238. package/src/components/ReadOnlyField/ReadOnlyField.module.css +54 -0
  239. package/src/components/ReadOnlyField/ReadOnlyField.stories.tsx +163 -0
  240. package/src/components/ReadOnlyField/ReadOnlyField.test.tsx +1 -0
  241. package/src/components/ReadOnlyField/ReadOnlyField.tsx +114 -0
  242. package/src/components/ReadOnlyField/ReadOnlySwitchField.tsx +21 -0
  243. package/src/components/ReadOnlyField/ReadOnlyTextField.tsx +48 -0
  244. package/src/components/ReadOnlyField/USAGE.md +44 -0
  245. package/src/components/ReadOnlyField/WithReadOnlyWrapper.tsx +93 -0
  246. package/src/components/ReadOnlyField/index.ts +5 -0
  247. package/src/components/RecursicaThemeProvider/USAGE.md +60 -0
  248. package/src/components/SegmentedControl/IMPLEMENTATION_NOTES.md +25 -0
  249. package/src/components/SegmentedControl/SegmentedControl.module.css +185 -0
  250. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +106 -0
  251. package/src/components/SegmentedControl/SegmentedControl.test.tsx +1 -0
  252. package/src/components/SegmentedControl/SegmentedControl.tsx +110 -0
  253. package/src/components/SegmentedControl/USAGE.md +55 -0
  254. package/src/components/Slider/IMPLEMENTATION_NOTES.md +92 -0
  255. package/src/components/Slider/Slider.module.css +588 -0
  256. package/src/components/Slider/Slider.stories.tsx +282 -0
  257. package/src/components/Slider/Slider.test.tsx +1 -0
  258. package/src/components/Slider/Slider.tsx +391 -0
  259. package/src/components/Slider/USAGE.md +56 -0
  260. package/src/components/Stack/STACK_IMPLEMENTATION_NOTES.md +4 -0
  261. package/src/components/Stack/Stack.module.css +7 -0
  262. package/src/components/Stack/Stack.stories.tsx +108 -0
  263. package/src/components/Stack/Stack.test.tsx +1 -0
  264. package/src/components/Stack/Stack.tsx +62 -0
  265. package/src/components/Stack/USAGE.md +48 -0
  266. package/src/components/Stepper/IMPLEMENTATION_NOTES.md +28 -0
  267. package/src/components/Stepper/Stepper.module.css +404 -0
  268. package/src/components/Stepper/Stepper.stories.tsx +148 -0
  269. package/src/components/Stepper/Stepper.test.tsx +1 -0
  270. package/src/components/Stepper/Stepper.tsx +93 -0
  271. package/src/components/Stepper/USAGE.md +41 -0
  272. package/src/components/Switch/SWITCH_IMPLEMENTATION_NOTES.md +64 -0
  273. package/src/components/Switch/Switch.module.css +279 -0
  274. package/src/components/Switch/Switch.stories.tsx +114 -0
  275. package/src/components/Switch/Switch.test.tsx +1 -0
  276. package/src/components/Switch/Switch.tsx +177 -0
  277. package/src/components/Switch/SwitchGroup.stories.tsx +132 -0
  278. package/src/components/Switch/SwitchGroup.tsx +127 -0
  279. package/src/components/Switch/USAGE.md +42 -0
  280. package/src/components/Table/TABLE_IMPLEMENTATION_NOTES.md +78 -0
  281. package/src/components/Table/Table.icons.tsx +40 -0
  282. package/src/components/Table/Table.module.css +444 -0
  283. package/src/components/Table/Table.stories.tsx +140 -0
  284. package/src/components/Table/Table.test.tsx +1 -0
  285. package/src/components/Table/Table.tsx +243 -0
  286. package/src/components/Table/USAGE.md +78 -0
  287. package/src/components/Tabs/IMPLEMENTATION_NOTES.md +27 -0
  288. package/src/components/Tabs/Tabs.module.css +591 -0
  289. package/src/components/Tabs/Tabs.stories.tsx +154 -0
  290. package/src/components/Tabs/Tabs.test.tsx +1 -0
  291. package/src/components/Tabs/Tabs.tsx +114 -0
  292. package/src/components/Tabs/USAGE.md +45 -0
  293. package/src/components/Text/TEXT_IMPLEMENTATION_NOTES.md +12 -0
  294. package/src/components/Text/Text.module.css +13 -0
  295. package/src/components/Text/Text.stories.tsx +75 -0
  296. package/src/components/Text/Text.test.tsx +1 -0
  297. package/src/components/Text/Text.tsx +53 -0
  298. package/src/components/Text/USAGE.md +40 -0
  299. package/src/components/TextArea/TEXTAREA_IMPLEMENTATION_NOTES.md +7 -0
  300. package/src/components/TextArea/TextArea.module.css +183 -0
  301. package/src/components/TextArea/TextArea.stories.tsx +94 -0
  302. package/src/components/TextArea/TextArea.test.tsx +1 -0
  303. package/src/components/TextArea/TextArea.tsx +137 -0
  304. package/src/components/TextArea/USAGE.md +48 -0
  305. package/src/components/TextField/TEXTFIELD_IMPLEMENTATION_NOTES.md +19 -0
  306. package/src/components/TextField/TextField.module.css +264 -0
  307. package/src/components/TextField/TextField.stories.tsx +162 -0
  308. package/src/components/TextField/TextField.test.tsx +1 -0
  309. package/src/components/TextField/TextField.tsx +139 -0
  310. package/src/components/TextField/USAGE.md +44 -0
  311. package/src/components/TimePicker/TIMEPICKER_IMPLEMENTATION_NOTES.md +119 -0
  312. package/src/components/TimePicker/TimePicker.module.css +291 -0
  313. package/src/components/TimePicker/TimePicker.stories.tsx +141 -0
  314. package/src/components/TimePicker/TimePicker.test.tsx +1 -0
  315. package/src/components/TimePicker/TimePicker.tsx +304 -0
  316. package/src/components/TimePicker/USAGE.md +57 -0
  317. package/src/components/Timeline/TIMELINE_IMPLEMENTATION_NOTES.md +13 -0
  318. package/src/components/Timeline/Timeline.module.css +373 -0
  319. package/src/components/Timeline/Timeline.stories.tsx +128 -0
  320. package/src/components/Timeline/Timeline.test.tsx +1 -0
  321. package/src/components/Timeline/Timeline.tsx +73 -0
  322. package/src/components/Timeline/TimelineItem.tsx +79 -0
  323. package/src/components/Timeline/USAGE.md +49 -0
  324. package/src/components/Toast/TOAST_IMPLEMENTATION_NOTES.md +39 -0
  325. package/src/components/Toast/Toast.module.css +184 -0
  326. package/src/components/Toast/Toast.stories.tsx +67 -0
  327. package/src/components/Toast/Toast.test.tsx +1 -0
  328. package/src/components/Toast/Toast.tsx +82 -0
  329. package/src/components/Toast/USAGE.md +50 -0
  330. package/src/components/Toast/index.ts +1 -0
  331. package/src/components/Tooltip/TOOLTIP_IMPLEMENTATION_NOTES.md +85 -0
  332. package/src/components/Tooltip/Tooltip.module.css +91 -0
  333. package/src/components/Tooltip/Tooltip.stories.tsx +165 -0
  334. package/src/components/Tooltip/Tooltip.test.tsx +1 -0
  335. package/src/components/Tooltip/Tooltip.tsx +117 -0
  336. package/src/components/Tooltip/USAGE.md +80 -0
  337. package/src/components/TransferList/TRANSFERLIST_IMPLEMENTATION_NOTES.md +111 -0
  338. package/src/components/TransferList/TransferList.module.css +182 -0
  339. package/src/components/TransferList/TransferList.stories.tsx +121 -0
  340. package/src/components/TransferList/TransferList.test.tsx +1 -0
  341. package/src/components/TransferList/TransferList.tsx +419 -0
  342. package/src/components/TransferList/USAGE.md +77 -0
  343. package/src/components/Tree/IMPLEMENTATION_NOTES.md +48 -0
  344. package/src/components/Tree/Tree.module.css +232 -0
  345. package/src/components/Tree/Tree.stories.tsx +104 -0
  346. package/src/components/Tree/Tree.test.tsx +1 -0
  347. package/src/components/Tree/Tree.tsx +220 -0
  348. package/src/components/Tree/USAGE.md +96 -0
  349. package/src/components/Tree/index.ts +1 -0
  350. package/src/components/index.ts +52 -0
  351. package/src/env.d.ts +7 -0
  352. package/src/index.ts +179 -0
  353. package/src/types/index.ts +9 -0
  354. package/src/types/mantine.d.ts +7 -0
  355. package/src/types/scss-modules.d.ts +9 -0
  356. package/src/utils/ColorSchemeWrapper.tsx +27 -0
  357. package/src/utils/RequireAccessibleLabel.ts +1 -0
  358. package/src/utils/copyToClipboard.ts +36 -0
  359. package/src/utils/filterStylingProps.test.ts +85 -0
  360. package/src/utils/filterStylingProps.ts +150 -0
  361. package/src/utils/index.ts +1 -0
  362. package/src/utils/renderRichOption.tsx +65 -0
@@ -0,0 +1,404 @@
1
+ /*
2
+ Recursica Stepper CSS module natively binding to Figma variables.
3
+
4
+ HARDCODED CSS NOTE:
5
+ For horizontal layout, Mantine natively renders the text horizontally alongside the icon.
6
+ To achieve Recursica's layout where horizontal orientation stacks text below the icon,
7
+ we force `.step` to be a column, `.stepBody` to remove margin and text-align center,
8
+ and the `.separator`'s margin-top is dynamically calculated `calc((indicator-size / 2) - 1px)`
9
+ to ensure it continues to align with the vertical center of the indicator rather than the
10
+ whole step wrapper.
11
+ */
12
+
13
+ .root {
14
+ /* Orientation specific gaps are mapped via data attributes */
15
+ }
16
+
17
+ .root.horizontal .steps {
18
+ align-items: flex-start;
19
+ --stepper-step-gap: var(
20
+ --recursica_ui-kit_components_stepper_variants_orientation_horizontal_properties_step-gap
21
+ );
22
+ --stepper-max-text-width: var(
23
+ --recursica_ui-kit_components_stepper_variants_orientation_horizontal_properties_max-text-width
24
+ );
25
+ }
26
+
27
+ .root.horizontal .step {
28
+ flex-direction: column;
29
+ align-items: center;
30
+ gap: var(
31
+ --recursica_ui-kit_components_stepper_variants_orientation_horizontal_properties_indicator-label-gap
32
+ );
33
+ }
34
+
35
+ .root.horizontal .stepBody {
36
+ width: var(--stepper-max-text-width);
37
+ display: flex;
38
+ flex-direction: column;
39
+ align-items: center;
40
+ justify-content: flex-start;
41
+ margin-left: 0; /* Mantine natively applies a margin-inline-start */
42
+ gap: var(
43
+ --recursica_ui-kit_components_stepper_variants_orientation_horizontal_properties_label-description-gap
44
+ );
45
+ }
46
+
47
+ .root.horizontal .stepLabel,
48
+ .root.horizontal .stepDescription {
49
+ width: max-content;
50
+ max-width: var(--stepper-max-text-width);
51
+ text-align: center;
52
+ white-space: normal;
53
+ }
54
+
55
+ .root.horizontal .separator {
56
+ align-self: flex-start; /* Force to top regardless of container alignment */
57
+ margin-top: calc(var(--stepper-indicator-size) / 2 - 1px);
58
+ margin-left: calc(
59
+ -1 * (var(--stepper-max-text-width) - var(--stepper-indicator-size)) / 2
60
+ );
61
+ margin-right: calc(
62
+ -1 * (var(--stepper-max-text-width) - var(--stepper-indicator-size)) / 2
63
+ );
64
+ }
65
+
66
+ /* Vertical Orientation */
67
+ .root.vertical {
68
+ --stepper-step-gap: var(
69
+ --recursica_ui-kit_components_stepper_variants_orientation_vertical_properties_step-gap
70
+ );
71
+ --separator-spacing: 0px; /* Force the line to touch the circle */
72
+ --stepper-max-text-width: var(
73
+ --recursica_ui-kit_components_stepper_variants_orientation_vertical_properties_max-text-width
74
+ );
75
+ }
76
+
77
+ .root.vertical .step {
78
+ gap: var(
79
+ --recursica_ui-kit_components_stepper_variants_orientation_vertical_properties_indicator-label-gap
80
+ );
81
+ margin-top: 0 !important; /* Remove Mantine's gap */
82
+ padding-bottom: var(
83
+ --stepper-step-gap
84
+ ); /* Move gap inside the step so the separator line can stretch through it */
85
+ }
86
+
87
+ .root.vertical .step:last-of-type {
88
+ padding-bottom: 0;
89
+ }
90
+
91
+ .root.vertical .stepBody {
92
+ gap: var(
93
+ --recursica_ui-kit_components_stepper_variants_orientation_vertical_properties_label-description-gap
94
+ );
95
+ }
96
+
97
+ /* Sizes */
98
+ .large {
99
+ --stepper-icon-size: var(
100
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_indicator-size
101
+ ); /* Maps to Mantine's circle size */
102
+ --stepper-indicator-size: var(
103
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_indicator-size
104
+ );
105
+ --stepper-border-size: var(
106
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_indicator-border-size
107
+ );
108
+ --stepper-border-radius: var(
109
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_indicator-border-radius
110
+ );
111
+ --stepper-font-family: var(
112
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_font-family
113
+ );
114
+ --stepper-font-size: var(
115
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_font-size
116
+ );
117
+ --stepper-font-style: var(
118
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_font-style
119
+ );
120
+ --stepper-font-weight: var(
121
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_font-weight
122
+ );
123
+ --stepper-letter-spacing: var(
124
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_letter-spacing
125
+ );
126
+ --stepper-line-height: var(
127
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_line-height
128
+ );
129
+ --stepper-text-decoration: var(
130
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_text-decoration
131
+ );
132
+ --stepper-text-transform: var(
133
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_step-number-text_text-transform
134
+ );
135
+ --stepper-svg-size: var(
136
+ --recursica_ui-kit_components_stepper_variants_sizes_large_properties_completed-icon-size
137
+ );
138
+ }
139
+
140
+ .small {
141
+ --stepper-icon-size: var(
142
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_indicator-size
143
+ ); /* Maps to Mantine's circle size */
144
+ --stepper-indicator-size: var(
145
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_indicator-size
146
+ );
147
+ --stepper-border-size: var(
148
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_indicator-border-size
149
+ );
150
+ --stepper-border-radius: var(
151
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_indicator-border-radius
152
+ );
153
+ --stepper-font-family: var(
154
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_font-family
155
+ );
156
+ --stepper-font-size: var(
157
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_font-size
158
+ );
159
+ --stepper-font-style: var(
160
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_font-style
161
+ );
162
+ --stepper-font-weight: var(
163
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_font-weight
164
+ );
165
+ --stepper-letter-spacing: var(
166
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_letter-spacing
167
+ );
168
+ --stepper-line-height: var(
169
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_line-height
170
+ );
171
+ --stepper-text-decoration: var(
172
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_text-decoration
173
+ );
174
+ --stepper-text-transform: var(
175
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_step-number-text_text-transform
176
+ );
177
+ --stepper-svg-size: var(
178
+ --recursica_ui-kit_components_stepper_variants_sizes_small_properties_completed-icon-size
179
+ );
180
+ }
181
+
182
+ /* Core Element Structuring using mapped variables */
183
+ .root .step {
184
+ /* Default to Mantine's native flex behavior (stretch) so the vertical separator spans the full height */
185
+ }
186
+
187
+ .root .stepBody {
188
+ max-width: var(--stepper-max-text-width);
189
+ display: flex;
190
+ flex-direction: column;
191
+ }
192
+
193
+ .root .stepLabel {
194
+ font-family: var(
195
+ --recursica_ui-kit_components_stepper_properties_label-text_font-family
196
+ );
197
+ font-size: var(
198
+ --recursica_ui-kit_components_stepper_properties_label-text_font-size
199
+ );
200
+ font-style: var(
201
+ --recursica_ui-kit_components_stepper_properties_label-text_font-style
202
+ );
203
+ font-weight: var(
204
+ --recursica_ui-kit_components_stepper_properties_label-text_font-weight
205
+ );
206
+ letter-spacing: var(
207
+ --recursica_ui-kit_components_stepper_properties_label-text_letter-spacing
208
+ );
209
+ line-height: var(
210
+ --recursica_ui-kit_components_stepper_properties_label-text_line-height
211
+ );
212
+ text-decoration: var(
213
+ --recursica_ui-kit_components_stepper_properties_label-text_text-decoration
214
+ );
215
+ text-transform: var(
216
+ --recursica_ui-kit_components_stepper_properties_label-text_text-transform
217
+ );
218
+ }
219
+
220
+ .root .stepDescription {
221
+ font-family: var(
222
+ --recursica_ui-kit_components_stepper_properties_description-text_font-family
223
+ );
224
+ font-size: var(
225
+ --recursica_ui-kit_components_stepper_properties_description-text_font-size
226
+ );
227
+ font-style: var(
228
+ --recursica_ui-kit_components_stepper_properties_description-text_font-style
229
+ );
230
+ font-weight: var(
231
+ --recursica_ui-kit_components_stepper_properties_description-text_font-weight
232
+ );
233
+ letter-spacing: var(
234
+ --recursica_ui-kit_components_stepper_properties_description-text_letter-spacing
235
+ );
236
+ line-height: var(
237
+ --recursica_ui-kit_components_stepper_properties_description-text_line-height
238
+ );
239
+ text-decoration: var(
240
+ --recursica_ui-kit_components_stepper_properties_description-text_text-decoration
241
+ );
242
+ text-transform: var(
243
+ --recursica_ui-kit_components_stepper_properties_description-text_text-transform
244
+ );
245
+ }
246
+
247
+ .root .stepIcon {
248
+ width: var(--stepper-indicator-size);
249
+ height: var(--stepper-indicator-size);
250
+ min-width: var(--stepper-indicator-size);
251
+ min-height: var(--stepper-indicator-size);
252
+ border-width: var(--stepper-border-size);
253
+ border-radius: 50%; /* Override Figma token to ensure perfectly circular indicators */
254
+
255
+ font-family: var(--stepper-font-family);
256
+ font-size: var(--stepper-font-size);
257
+ font-style: var(--stepper-font-style);
258
+ font-weight: var(--stepper-font-weight);
259
+ letter-spacing: var(--stepper-letter-spacing);
260
+ line-height: var(--stepper-line-height);
261
+ text-decoration: var(--stepper-text-decoration);
262
+ text-transform: var(--stepper-text-transform);
263
+
264
+ display: flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ /* Font details are implicitly mapped by sizes, but colors map to states */
268
+ /* Upcoming State (Pending) - Default */
269
+ background-color: var(
270
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-indicator-background-color
271
+ );
272
+ border-color: var(
273
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-indicator-border-color
274
+ );
275
+ color: var(
276
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-indicator-text
277
+ );
278
+ }
279
+
280
+ /* Completed State */
281
+ .root .stepIcon[data-completed] {
282
+ background-color: var(
283
+ --recursica_ui-kit_components_stepper_properties_colors_completed-indicator-background-color
284
+ );
285
+ border-color: var(
286
+ --recursica_ui-kit_components_stepper_properties_colors_completed-indicator-border-color
287
+ );
288
+ }
289
+
290
+ .root .stepCompletedIcon {
291
+ color: var(
292
+ --recursica_ui-kit_components_stepper_properties_colors_completed-indicator-text
293
+ );
294
+ }
295
+
296
+ .root .stepCompletedIcon svg {
297
+ width: var(--stepper-svg-size);
298
+ height: var(--stepper-svg-size);
299
+ }
300
+
301
+ .root .step[data-completed] .stepLabel {
302
+ color: var(
303
+ --recursica_ui-kit_components_stepper_properties_colors_completed-label-color
304
+ );
305
+ }
306
+
307
+ .root .step[data-completed] .stepDescription {
308
+ color: var(
309
+ --recursica_ui-kit_components_stepper_properties_colors_completed-description-color
310
+ );
311
+ }
312
+
313
+ /* Current State (Progressing) */
314
+ .root .stepIcon[data-progress] {
315
+ background-color: var(
316
+ --recursica_ui-kit_components_stepper_properties_colors_current-indicator-background-color
317
+ );
318
+ border-color: var(
319
+ --recursica_ui-kit_components_stepper_properties_colors_current-indicator-border-color
320
+ );
321
+ color: var(
322
+ --recursica_ui-kit_components_stepper_properties_colors_current-indicator-text
323
+ );
324
+ }
325
+
326
+ .root .step[data-progress] .stepLabel {
327
+ color: var(
328
+ --recursica_ui-kit_components_stepper_properties_colors_current-label-color
329
+ );
330
+ }
331
+
332
+ .root .step[data-progress] .stepDescription {
333
+ color: var(
334
+ --recursica_ui-kit_components_stepper_properties_colors_current-description-color
335
+ );
336
+ }
337
+
338
+ /* Upcoming State (Pending Labels) */
339
+ .root .step:not([data-completed]):not([data-progress]) .stepLabel {
340
+ color: var(
341
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-label-color
342
+ );
343
+ }
344
+
345
+ .root .step:not([data-completed]):not([data-progress]) .stepDescription {
346
+ color: var(
347
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-description-color
348
+ );
349
+ }
350
+
351
+ /* Horizontal Separator */
352
+ .root .separator {
353
+ margin: 0 var(--stepper-step-gap); /* Apply the gap logic to the separator natively */
354
+ background-color: var(
355
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-connector-color
356
+ );
357
+ height: var(
358
+ --recursica_ui-kit_components_stepper_properties_upcoming-connector-size
359
+ );
360
+ border: none;
361
+ min-width: 20px;
362
+ flex: 1;
363
+ }
364
+
365
+ .root .separator[data-active] {
366
+ background-color: var(
367
+ --recursica_ui-kit_components_stepper_properties_colors_completed-connector-color
368
+ );
369
+ height: var(
370
+ --recursica_ui-kit_components_stepper_properties_completed-connector-size
371
+ );
372
+ }
373
+
374
+ /* Vertical Separator */
375
+ .root .verticalSeparator {
376
+ border-inline-start: var(
377
+ --recursica_ui-kit_components_stepper_properties_upcoming-connector-size
378
+ )
379
+ solid
380
+ var(
381
+ --recursica_ui-kit_components_stepper_properties_colors_upcoming-connector-color
382
+ );
383
+ top: var(
384
+ --stepper-icon-size
385
+ ); /* Overrides Mantine's gap math to force the line to touch the icon */
386
+ }
387
+
388
+ .root .verticalSeparator[data-active] {
389
+ border-inline-start: var(
390
+ --recursica_ui-kit_components_stepper_properties_completed-connector-size
391
+ )
392
+ solid
393
+ var(
394
+ --recursica_ui-kit_components_stepper_properties_colors_completed-connector-color
395
+ );
396
+ }
397
+
398
+ /* Hide Content
399
+ Recursica Steppers are purely navigational/structural. Content should be managed
400
+ by the parent layout outside of the Stepper DOM.
401
+ */
402
+ .root .content {
403
+ display: none;
404
+ }
@@ -0,0 +1,148 @@
1
+ import React, { useState } from "react";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { Stepper } from "./Stepper";
4
+ import { Button } from "../Button/Button";
5
+ import { Group } from "../Group/Group";
6
+ import { Flex } from "../Flex/Flex";
7
+
8
+ const meta: Meta<typeof Stepper> = {
9
+ title: "UI-Kit/Stepper",
10
+ component: Stepper,
11
+ tags: ["autodocs"],
12
+ parameters: {
13
+ layout: "centered",
14
+ docs: {
15
+ description: {
16
+ component: `
17
+ The \`Stepper\` component provides a visual progression interface strictly mapped to Recursica's UI-Kit.
18
+ This component wraps Mantine's \`Stepper\` and natively enforces Figma tokens for sizes, colors, gaps, and states (\`completed\`, \`current\`, \`upcoming\`).
19
+
20
+ ### Layout & Orientation
21
+ Orientation dictates how the steps flow:
22
+ - **horizontal**: Steps render side-by-side.
23
+ - **vertical**: Steps stack vertically, mapping seamlessly to the vertical gap tokens.
24
+ `,
25
+ },
26
+ },
27
+ },
28
+ argTypes: {
29
+ size: {
30
+ control: "radio",
31
+ options: ["small", "large"],
32
+ },
33
+ orientation: {
34
+ control: "radio",
35
+ options: ["horizontal", "vertical"],
36
+ },
37
+ defaultChecked: {
38
+ table: { disable: true },
39
+ },
40
+ },
41
+ };
42
+
43
+ export default meta;
44
+ type Story = StoryObj<typeof Stepper>;
45
+
46
+ const InteractiveStepper = (args: React.ComponentProps<typeof Stepper>) => {
47
+ const [active, setActive] = useState(1);
48
+ const nextStep = () =>
49
+ setActive((current) => (current < 3 ? current + 1 : current));
50
+ const prevStep = () =>
51
+ setActive((current) => (current > 0 ? current - 1 : current));
52
+
53
+ return (
54
+ <Flex direction="column" w={600}>
55
+ <Stepper {...args} active={active} onStepClick={setActive}>
56
+ <Stepper.Step
57
+ label="First step"
58
+ description="Create an account and set up your billing profile"
59
+ />
60
+ <Stepper.Step
61
+ label="Second step"
62
+ description="Verify email and ensure all notification preferences are correct"
63
+ />
64
+ <Stepper.Step label="Final step" description="Get full access" />
65
+ <Stepper.Completed>
66
+ Completed, click back button to get to previous step
67
+ </Stepper.Completed>
68
+ </Stepper>
69
+
70
+ <Group mt={24} justify="center" gap={8}>
71
+ <Button variant="outline" onClick={prevStep} disabled={active === 0}>
72
+ Previous step
73
+ </Button>
74
+ <Button variant="outline" onClick={nextStep} disabled={active === 3}>
75
+ Next step
76
+ </Button>
77
+ </Group>
78
+ </Flex>
79
+ );
80
+ };
81
+
82
+ export const Default: Story = {
83
+ render: (args) => <InteractiveStepper {...args} />,
84
+ args: {
85
+ size: "large",
86
+ orientation: "horizontal",
87
+ },
88
+ };
89
+
90
+ export const Small: Story = {
91
+ render: (args) => <InteractiveStepper {...args} />,
92
+ args: {
93
+ size: "small",
94
+ orientation: "horizontal",
95
+ },
96
+ };
97
+
98
+ export const Vertical: Story = {
99
+ render: (args) => <InteractiveStepper {...args} />,
100
+ args: {
101
+ size: "large",
102
+ orientation: "vertical",
103
+ },
104
+ };
105
+
106
+ const StressTestStepper = (args: React.ComponentProps<typeof Stepper>) => {
107
+ const [active, setActive] = useState(1);
108
+ const nextStep = () =>
109
+ setActive((current) => (current < 3 ? current + 1 : current));
110
+ const prevStep = () =>
111
+ setActive((current) => (current > 0 ? current - 1 : current));
112
+
113
+ return (
114
+ <Flex direction="column" w={600}>
115
+ <Stepper {...args} active={active} onStepClick={setActive}>
116
+ <Stepper.Step
117
+ label="This is an extremely long step title designed to test how the layout handles multiline text wrapping and constraints"
118
+ description="Create an account and set up your billing profile"
119
+ />
120
+ <Stepper.Step
121
+ label="Second step"
122
+ description="Verify email and ensure all notification preferences are correct"
123
+ />
124
+ <Stepper.Step label="Final step" />
125
+ <Stepper.Completed>
126
+ Completed, click back button to get to previous step
127
+ </Stepper.Completed>
128
+ </Stepper>
129
+
130
+ <Group mt={24} justify="center" gap={8}>
131
+ <Button variant="outline" onClick={prevStep} disabled={active === 0}>
132
+ Previous step
133
+ </Button>
134
+ <Button variant="outline" onClick={nextStep} disabled={active === 3}>
135
+ Next step
136
+ </Button>
137
+ </Group>
138
+ </Flex>
139
+ );
140
+ };
141
+
142
+ export const LayoutStressTest: Story = {
143
+ render: (args) => <StressTestStepper {...args} />,
144
+ args: {
145
+ size: "large",
146
+ orientation: "horizontal",
147
+ },
148
+ };
@@ -0,0 +1 @@
1
+ // Placeholder for future Stepper component tests. Add tests here if/when needed.
@@ -0,0 +1,93 @@
1
+ import React, { forwardRef } from "react";
2
+ import {
3
+ Stepper as MantineStepper,
4
+ type StepperProps as MantineStepperProps,
5
+ type StepperStepProps as MantineStepperStepProps,
6
+ } from "@mantine/core";
7
+ import {
8
+ filterStylingProps,
9
+ mergeClassNames,
10
+ type RecursicaOverStyled,
11
+ } from "../../utils/filterStylingProps";
12
+ import styles from "./Stepper.module.css";
13
+
14
+ import { type RecursicaStepperProps } from "@recursica/adapter-common";
15
+
16
+ export interface RecursicaStepperPropsExtended
17
+ extends Omit<MantineStepperProps, "size">,
18
+ RecursicaStepperProps {}
19
+
20
+ export type StepperProps = RecursicaOverStyled<RecursicaStepperPropsExtended>;
21
+
22
+ const _Stepper = forwardRef<HTMLDivElement, StepperProps>(
23
+ function Stepper(props, ref) {
24
+ const {
25
+ overStyled = false,
26
+ size = "large",
27
+ orientation = "horizontal",
28
+ className,
29
+ style,
30
+ ...rest
31
+ } = props;
32
+
33
+ const sanitizedProps = filterStylingProps(rest, overStyled);
34
+ const restRecord = sanitizedProps as Record<string, unknown>;
35
+
36
+ const mergedClassNames = mergeClassNames(
37
+ {
38
+ steps: styles.steps,
39
+ step: styles.step,
40
+ stepIcon: styles.stepIcon,
41
+ stepCompletedIcon: styles.stepCompletedIcon,
42
+ stepBody: styles.stepBody,
43
+ stepLabel: styles.stepLabel,
44
+ stepDescription: styles.stepDescription,
45
+ separator: styles.separator,
46
+ verticalSeparator: styles.verticalSeparator,
47
+ content: styles.content,
48
+ },
49
+ restRecord.classNames as Partial<Record<string, string>> | undefined,
50
+ );
51
+
52
+ return (
53
+ <MantineStepper
54
+ ref={ref}
55
+ {...(sanitizedProps as MantineStepperProps)}
56
+ orientation={orientation}
57
+ className={`${styles.root} ${orientation === "horizontal" ? styles.horizontal : styles.vertical} ${size === "large" ? styles.large : styles.small} ${className || ""}`}
58
+ style={style as React.CSSProperties}
59
+ data-size={size}
60
+ data-orientation={orientation}
61
+ classNames={mergedClassNames}
62
+ />
63
+ );
64
+ },
65
+ );
66
+
67
+ export type StepperStepProps = RecursicaOverStyled<MantineStepperStepProps>;
68
+
69
+ const _StepperStep = forwardRef<HTMLButtonElement, StepperStepProps>(
70
+ function StepperStep({ overStyled = false, ...rest }, ref) {
71
+ const sanitizedProps = filterStylingProps(rest, overStyled);
72
+ return (
73
+ <MantineStepper.Step
74
+ ref={ref}
75
+ {...(sanitizedProps as unknown as MantineStepperStepProps)}
76
+ />
77
+ );
78
+ },
79
+ );
80
+ _StepperStep.displayName = "Stepper.Step";
81
+
82
+ // We need to re-export the static components Step and Completed
83
+ export const Stepper: typeof _Stepper & {
84
+ Step: typeof _StepperStep;
85
+ Completed: typeof MantineStepper.Completed;
86
+ } = Object.assign(_Stepper, {
87
+ Step: _StepperStep,
88
+ // Stepper.Completed only accepts `children` — no styling props to strip,
89
+ // so re-exporting Mantine's implementation directly is not a gap.
90
+ Completed: MantineStepper.Completed,
91
+ });
92
+
93
+ _Stepper.displayName = "Stepper";
@@ -0,0 +1,41 @@
1
+ # Stepper - Usage Guide
2
+
3
+ This document describes how to integrate and use the `Stepper` component in your projects using `@recursica/adapter-mantine-v8`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { Stepper } from "@recursica/adapter-mantine-v8";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { Stepper } from "@recursica/adapter-mantine-v8";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <Stepper active={1}>
24
+ <Stepper.Step label="First step" description="Create account" />
25
+ <Stepper.Step label="Second step" description="Verify email" />
26
+ </Stepper>
27
+ );
28
+ }
29
+ ```
30
+
31
+ ---
32
+
33
+ ## 3. Design System Integration
34
+
35
+ All Recursica components in the `@recursica/adapter-mantine-v8` package adhere strictly to design system spacing, scaling, and behavior patterns.
36
+
37
+ > [!IMPORTANT]
38
+ >
39
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
40
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
41
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.