@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,7 @@
1
+ /**
2
+ * GLOBAL EXEMPTIONS
3
+ *
4
+ * This file hosts global, brand, and layout variables that are defined in
5
+ * recursica_variables_scoped.css but are not used by any specific component.
6
+ * Isolating them here keeps individual component stylesheets clean and focused.
7
+ */
@@ -0,0 +1,184 @@
1
+ import type { Meta } from "@storybook/react-vite";
2
+ import { AdaptersContent, MuiLogo } from "@recursica/storybook-template";
3
+ import { VersionInfo } from "./Version";
4
+ import { OverStylingInfo } from "./OverStyling";
5
+
6
+ const DOCS_URL = "https://recursica.com";
7
+ const FORGE_URL = "https://forge.recursica.com";
8
+
9
+ import { Box } from "@mui/material";
10
+ import { Container, Group, Heading, Text, Link } from "./components";
11
+
12
+ function IntroductionContent() {
13
+ return (
14
+ <Container size="md" style={{ padding: "32px 0", maxWidth: 640 }}>
15
+ <Group gap="rec-md" mb={2}>
16
+ <MuiLogo width={40} height={40} />
17
+ <Box>
18
+ <Heading order={1} m={0}>
19
+ Recursica Design System (MUI Adapter)
20
+ </Heading>
21
+ <Link href="https://mui.com" target="_blank" rel="noreferrer">
22
+ mui.com
23
+ </Link>
24
+ </Box>
25
+ </Group>
26
+ <Text mb={4}>
27
+ This Storybook showcases the Recursica design system implemented for the{" "}
28
+ <strong>Material UI (MUI) Kit</strong>. It provides reusable components
29
+ that map our design tokens to MUI's robust component layer.
30
+ </Text>
31
+
32
+ <Box component="section" sx={{ mb: 4 }}>
33
+ <Heading order={2} mb={1}>
34
+ Looking for another UI Kit?
35
+ </Heading>
36
+ <Text>
37
+ Are you using a different UI Kit (like Mantine)? Recursica provides
38
+ multiple adapters for different frameworks.
39
+ </Text>
40
+ <Box sx={{ mt: 2 }}>
41
+ <a
42
+ href="./?path=/story/introduction--adapters"
43
+ target="_parent"
44
+ className="adapter-btn"
45
+ style={{
46
+ display: "inline-flex",
47
+ alignItems: "center",
48
+ justifyContent: "center",
49
+ backgroundColor:
50
+ "var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_background)",
51
+ color:
52
+ "var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text)",
53
+ textDecoration: "none",
54
+ borderRadius:
55
+ "var(--recursica_ui-kit_components_button_variants_sizes_default_properties_border-radius)",
56
+ height:
57
+ "var(--recursica_ui-kit_components_button_variants_sizes_default_properties_height)",
58
+ padding:
59
+ "0 var(--recursica_ui-kit_components_button_variants_sizes_default_properties_horizontal-padding)",
60
+ fontFamily:
61
+ "var(--recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-family)",
62
+ fontSize:
63
+ "var(--recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-size)",
64
+ fontWeight:
65
+ "var(--recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-weight)",
66
+ boxShadow:
67
+ "var(--recursica_ui-kit_components_button_variants_styles_solid_properties_elevation)",
68
+ border:
69
+ "var(--recursica_ui-kit_components_button_variants_styles_solid_properties_border-size) solid var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_border-color)",
70
+ transition: "opacity 0.2s ease",
71
+ }}
72
+ onMouseOver={(e) => {
73
+ e.currentTarget.style.opacity = "0.85";
74
+ e.currentTarget.style.color =
75
+ "var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text-hover)";
76
+ }}
77
+ onMouseOut={(e) => {
78
+ e.currentTarget.style.opacity = "1";
79
+ e.currentTarget.style.color =
80
+ "var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text)";
81
+ }}
82
+ >
83
+ View Supported Adapters
84
+ </a>
85
+ </Box>
86
+ </Box>
87
+
88
+ <Box component="section" sx={{ mb: 4 }}>
89
+ <Heading order={2} mb={1}>
90
+ Installation
91
+ </Heading>
92
+ <Text>To install the MUI adapter in your project, run:</Text>
93
+ <Box
94
+ component="pre"
95
+ sx={{
96
+ p: 1.5,
97
+ bgcolor: "grey.100",
98
+ borderRadius: 1,
99
+ fontSize: 13,
100
+ mt: 1,
101
+ }}
102
+ >
103
+ <code>
104
+ npm install @recursica/adapter-mui-v7 @mui/material @emotion/react
105
+ @emotion/styled
106
+ </code>
107
+ </Box>
108
+ </Box>
109
+
110
+ <Box component="section" sx={{ mb: 4 }}>
111
+ <Heading order={2} mb={1}>
112
+ Tokens
113
+ </Heading>
114
+ <Text>
115
+ Raw design tokens (colors, sizes, font weights, opacities, etc.) that
116
+ feed the theme and components. These are the primitive values defined
117
+ in your token set and exposed as CSS custom properties.
118
+ </Text>
119
+ </Box>
120
+
121
+ <Box component="section" sx={{ mb: 4 }}>
122
+ <Heading order={2} mb={1}>
123
+ Theme
124
+ </Heading>
125
+ <Text>
126
+ Brand and theme layer built on top of tokens. Typography types,
127
+ dimensions, and layout grids are defined here. Theme uses the tokens
128
+ and exposes both CSS variables and helper classes (e.g. typography
129
+ classes) for consistent styling across the product.
130
+ </Text>
131
+ </Box>
132
+
133
+ <Box component="section" sx={{ mb: 4 }}>
134
+ <Heading order={2} mb={1}>
135
+ Configuring Recursica
136
+ </Heading>
137
+ <Text>
138
+ To modify the Recursica configuration (tokens, brand, theme), go to{" "}
139
+ <Link href={FORGE_URL} target="_blank" rel="noopener noreferrer">
140
+ {FORGE_URL}
141
+ </Link>
142
+ . Changes there drive the tokens and theme you see in this Storybook.
143
+ </Text>
144
+ </Box>
145
+
146
+ <Box component="section" sx={{ mb: 4 }}>
147
+ <Heading order={2} mb={1}>
148
+ Documentation
149
+ </Heading>
150
+ <Text>
151
+ For full documentation, guides, and API reference, visit{" "}
152
+ <Link href={DOCS_URL} target="_blank" rel="noopener noreferrer">
153
+ {DOCS_URL}
154
+ </Link>
155
+ .
156
+ </Text>
157
+ </Box>
158
+ </Container>
159
+ );
160
+ }
161
+
162
+ const meta = {
163
+ title: "Introduction",
164
+ } satisfies Meta;
165
+
166
+ export default meta;
167
+
168
+ export const Welcome = {
169
+ render: () => <IntroductionContent />,
170
+ };
171
+
172
+ export const Adapters = {
173
+ render: () => <AdaptersContent />,
174
+ };
175
+
176
+ export const OverStyling = {
177
+ name: "Over Styling",
178
+ render: () => <OverStylingInfo />,
179
+ };
180
+
181
+ export const VersionInfoStory = {
182
+ name: "Version Info",
183
+ render: () => <VersionInfo />,
184
+ };
@@ -0,0 +1,87 @@
1
+ import ReactMarkdown from "react-markdown";
2
+ import { Box, Paper, Divider } from "@mui/material";
3
+ import {
4
+ Container,
5
+ Stack,
6
+ Text as RawText,
7
+ Heading,
8
+ Switch as RawSwitch,
9
+ } from "./components";
10
+ import { Button as RawButton } from "./components/Button/Button";
11
+ import {
12
+ useGlobalOverStyled,
13
+ toggleGlobalOverStyled,
14
+ wrapComponent,
15
+ } from "@recursica/adapter-common";
16
+ import overStylingDoc from "../OVERSTYLING.md?raw";
17
+
18
+ const Button = wrapComponent(RawButton);
19
+ const Text = wrapComponent(RawText);
20
+ const Switch = wrapComponent(RawSwitch);
21
+
22
+ export const OverStylingInfo = () => {
23
+ const isHighlightActive = useGlobalOverStyled();
24
+ return (
25
+ <Container size="md" style={{ padding: "32px 0" }}>
26
+ <Paper variant="outlined" sx={{ p: 4, borderRadius: 2 }}>
27
+ <Box className="markdown-body">
28
+ <ReactMarkdown>{overStylingDoc}</ReactMarkdown>
29
+ </Box>
30
+
31
+ <Divider sx={{ my: 4 }} />
32
+
33
+ <Heading order={6} mb={2}>
34
+ Try It Yourself
35
+ </Heading>
36
+
37
+ <Stack direction="row" alignItems="center" spacing="rec-sm" mb="rec-md">
38
+ <Switch
39
+ label="Highlight Over-Styled Components"
40
+ checked={isHighlightActive}
41
+ onChange={() => toggleGlobalOverStyled()}
42
+ />
43
+ </Stack>
44
+
45
+ <Text mb={4}>
46
+ Below is a side-by-side comparison. The first is a standard Recursica
47
+ Button protected by the design tokens mapping. The second flagrantly
48
+ forces <code>overStyled={`{true}`}</code>, allowing MUI's native
49
+ styling generics to punch right through the sandbox layout.
50
+ </Text>
51
+
52
+ <Stack direction="row" spacing="rec-default">
53
+ <Box>
54
+ <Text
55
+ variant="caption"
56
+ overStyled
57
+ sx={{ color: "text.secondary", mb: 1, display: "block" }}
58
+ >
59
+ Strict Baseline (Default)
60
+ </Text>
61
+ <Button>Standard UI Kit Button</Button>
62
+ </Box>
63
+ <Box>
64
+ <Text
65
+ variant="caption"
66
+ overStyled
67
+ sx={{ color: "text.secondary", mb: 1, display: "block" }}
68
+ >
69
+ overStyled={`{true}`}
70
+ </Text>
71
+ <Button
72
+ overStyled={true}
73
+ style={{
74
+ backgroundColor: "pink",
75
+ color: "black",
76
+ borderRadius: "24px",
77
+ padding: "8px 16px",
78
+ }}
79
+ >
80
+ Unsafe Pink Marketing Button
81
+ </Button>
82
+ </Box>
83
+ </Stack>
84
+ </Paper>
85
+ </Container>
86
+ );
87
+ };
@@ -0,0 +1,37 @@
1
+ import ReactMarkdown from "react-markdown";
2
+ import { Paper, Divider, Box } from "@mui/material";
3
+ import { Container, Heading, Group, Link } from "./components";
4
+ import pkg from "../package.json";
5
+ import changelog from "../CHANGELOG.md?raw";
6
+
7
+ export const VersionInfo = () => {
8
+ return (
9
+ <Container size="md" style={{ padding: "32px 0" }}>
10
+ <Paper variant="outlined" sx={{ p: 4, borderRadius: 2 }}>
11
+ <Heading order={1} mb={1}>
12
+ MUI Adapter v{pkg.version}
13
+ </Heading>
14
+ <Group mb={4} gap="rec-md">
15
+ <Link
16
+ href="https://github.com/borderux/recursica"
17
+ target="_blank"
18
+ rel="noopener noreferrer"
19
+ >
20
+ GitHub Repository
21
+ </Link>
22
+ <Link
23
+ href="https://recursica.com"
24
+ target="_blank"
25
+ rel="noopener noreferrer"
26
+ >
27
+ Documentation & Website
28
+ </Link>
29
+ </Group>
30
+ <Divider sx={{ mb: 4 }} />
31
+ <Box className="markdown-body">
32
+ <ReactMarkdown>{changelog}</ReactMarkdown>
33
+ </Box>
34
+ </Paper>
35
+ </Container>
36
+ );
37
+ };
@@ -0,0 +1,107 @@
1
+ # Accordion – implementation notes
2
+
3
+ Decisions and design tweaks specific to the UI Kit's Accordion wrapped against `@mui/material`.
4
+
5
+ ---
6
+
7
+ ## 1. Context-based container (no native MUI equivalent)
8
+
9
+ **Decision:** MUI has no group-level `Accordion` — its own `Accordion` component _is_ the
10
+ item, controlled individually via `expanded`/`onChange`. Recursica's container/group model
11
+ (single `value`, `multiple`, cascading `chevron`) is reimplemented with a React context
12
+ (`AccordionContext`) that each `AccordionItem`/`AccordionControl` reads from.
13
+ **Implementation:** `AccordionBase` owns the controlled/uncontrolled `value` state and hands
14
+ `{ value, onChange, chevron }` down via context; `AccordionItem` derives its own `expanded`
15
+ from that context instead of taking it as a prop.
16
+
17
+ ---
18
+
19
+ ## 2. Prop-contract Omits protect the context wiring
20
+
21
+ **Decision:** Because `AccordionItem`/`AccordionControl` are thin wrappers around real MUI
22
+ components (`MuiAccordion`/`MuiAccordionSummary`), their native `expanded`/`onChange`/
23
+ `expandIcon` props would otherwise collide with the values these wrappers compute from
24
+ context.
25
+ **Implementation:** `AccordionItemWrapperProps` omits `expanded`/`onChange`/`defaultExpanded`
26
+ from `MuiAccordionProps`; `AccordionControlWrapperProps` omits `expandIcon` from
27
+ `MuiAccordionSummaryProps`. Neither is exposed on `RecursicaAccordionItemProps`/
28
+ `RecursicaAccordionControlProps`, so passing them is a compile error, not a silent override.
29
+
30
+ ---
31
+
32
+ ## 3. `disabled` is a formally supported, shared prop
33
+
34
+ **Decision:** `RecursicaAccordionItemProps.disabled` is shared as-is with MUI's native
35
+ `Accordion.disabled` — same name, same shape, no reshaping needed. MUI already blocks
36
+ click/keyboard interaction on the control internally once `disabled` is set (its `AccordionSummary`
37
+ renders as a real disabled `<button>`); the visual dim is Recursica's own, not MUI's default.
38
+ **Implementation:** `AccordionItem` destructures `disabled` explicitly (rather than letting it
39
+ ride through in `...rest`) so it can also drive `data-disabled` on the item root for the dim.
40
+ MUI's own default disabled treatment — a separate hardcoded background/opacity on both the
41
+ item root and the control (`.Mui-disabled`) — is neutralized in `Accordion.module.css` so the
42
+ token-driven `.item[data-disabled]` dim is the single source of truth.
43
+
44
+ ---
45
+
46
+ ## 4. Chevron via `expandIcon` wrapper
47
+
48
+ **Decision:** MUI's expand indicator is set through `AccordionSummary.expandIcon`, not a
49
+ child. Recursica's container-level `chevron` (or the default arrow) is threaded through
50
+ context and rendered into that slot.
51
+ **Implementation:** `AccordionControl` resolves `ctx?.chevron ?? <ChevronIcon />` and passes
52
+ it as `expandIcon={<span className={styles.chevron}>{resolvedChevron}</span>}`.
53
+
54
+ ---
55
+
56
+ ## 5. Transparent background for `Layer` overrides
57
+
58
+ **Decision:** Same reasoning as the Mantine adapter's hover-fix note — MUI's `Paper`-derived
59
+ `Accordion` root ships its own background; Recursica needs it transparent so ambient `Layer`
60
+ tokens can apply.
61
+ **Implementation:** `AccordionItem` merges `backgroundColor: "transparent"` into `style`
62
+ ahead of any caller-supplied `style`, and forces `disableGutters`/`elevation={0}`/`square` to
63
+ strip MUI's own spacing/elevation/border-radius defaults.
64
+
65
+ ---
66
+
67
+ ## 6. Chevron double-rotation (source-of-truth audit, 2026-08-30)
68
+
69
+ **Decision:** Don't rotate `.chevron` ourselves on expand — let MUI's own wrapper handle it.
70
+
71
+ **Implementation:** `expandIcon`'s `<span className={styles.chevron}>` gets placed _inside_
72
+ MUI's own `.MuiAccordionSummary-expandIconWrapper`, which already rotates 180deg on
73
+ `.Mui-expanded` (MUI's own stable, documented behavior). `Accordion.module.css` also had
74
+ `.item:global(.Mui-expanded) .chevron { transform: rotate(180deg); }`, rotating the same span
75
+ a _second_ time — the two 180deg rotations canceled out, so the chevron visually never
76
+ appeared to move even though the accordion state was correct. Found via the
77
+ `adapter-tester:source-of-truth` divergence check comparing against mantine's golden. Removed
78
+ the redundant `transform` from that rule; kept the icon-color swap it also carries.
79
+
80
+ ---
81
+
82
+ ## 7. Long title wrapped instead of truncating (source-of-truth audit, 2026-08-30)
83
+
84
+ **Symptom:** `ui-kit-accordion--long-title-truncation`'s header label wrapped onto multiple
85
+ lines (pushing the chevron down) instead of truncating to a single line with an ellipsis, like
86
+ mantine's does.
87
+
88
+ **Root cause:** Two missing pieces, both present in mantine's identically-purposed `.label`
89
+ rule but absent from mui's:
90
+
91
+ 1. `.label` itself had no `white-space: nowrap`/`text-overflow: ellipsis`/`overflow` at all —
92
+ it was never told to truncate in the first place.
93
+ 2. Even after adding those, truncation still didn't take effect: `.control
94
+ :global(.MuiAccordionSummary-content)` — the MUI-native flex wrapper sitting between
95
+ `.control`'s flex row and `.label` — had `flex: 1` but no `min-width: 0`. A flex item's
96
+ automatic minimum width defaults to its content's min-content size; once `.label`'s text is
97
+ `white-space: nowrap`, that min-content size becomes the entire unwrapped title width, which
98
+ propagated up through this intermediate flex item and prevented it (and `.label` inside it)
99
+ from ever shrinking below the full title width, so `text-overflow: ellipsis` had no room to
100
+ apply.
101
+
102
+ **Fix:** Added `min-width: 0`, `overflow: clip` (+ `overflow-clip-margin: 0.35em`, not plain
103
+ `hidden`, to avoid clipping descenders — see Chip/FileInput's implementation notes for the
104
+ original discovery), `white-space: nowrap`, and `text-overflow: ellipsis` to `.label` (matching
105
+ mantine's rule exactly), plus `min-width: 0` on the intermediate `.MuiAccordionSummary-content`
106
+ wrapper so the shrink constraint actually reaches `.label`. Verified live against mantine's
107
+ `LongTitleTruncation` story — both truncate to a single line with a trailing ellipsis.