@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
package/src/index.ts ADDED
@@ -0,0 +1,194 @@
1
+ import "@recursica/adapter-common/style.css";
2
+ import * as rawComponents from "./components";
3
+ import { wrapComponent } from "@recursica/adapter-common";
4
+
5
+ export * from "@recursica/adapter-common";
6
+
7
+ // Expose unwrapped structural layout primitives to preserve their polymorphic types
8
+ export const Flex = rawComponents.Flex;
9
+ export const Grid = rawComponents.Grid;
10
+ export const GridCol = rawComponents.GridCol;
11
+ export const Group = rawComponents.Group;
12
+ export const Stack = rawComponents.Stack;
13
+ export const Container = rawComponents.Container;
14
+ export const Typography = rawComponents.Typography;
15
+
16
+ // Statically wrap and export components to inject overStyled visual highlight in dev mode
17
+ export const Accordion = wrapComponent(
18
+ rawComponents.Accordion,
19
+ ) as typeof rawComponents.Accordion;
20
+ export const AccordionItem = wrapComponent(
21
+ rawComponents.AccordionItem,
22
+ ) as typeof rawComponents.AccordionItem;
23
+ export const AccordionControl = wrapComponent(
24
+ rawComponents.AccordionControl,
25
+ ) as typeof rawComponents.AccordionControl;
26
+ export const AccordionPanel = wrapComponent(
27
+ rawComponents.AccordionPanel,
28
+ ) as typeof rawComponents.AccordionPanel;
29
+ export const AssistiveElement = wrapComponent(
30
+ rawComponents.AssistiveElement,
31
+ ) as typeof rawComponents.AssistiveElement;
32
+ export const AutoComplete = wrapComponent(
33
+ rawComponents.AutoComplete,
34
+ ) as typeof rawComponents.AutoComplete;
35
+ export const Avatar = wrapComponent(
36
+ rawComponents.Avatar,
37
+ ) as typeof rawComponents.Avatar;
38
+ export const Badge = wrapComponent(
39
+ rawComponents.Badge,
40
+ ) as typeof rawComponents.Badge;
41
+ export const Breadcrumb = wrapComponent(
42
+ rawComponents.Breadcrumb,
43
+ ) as typeof rawComponents.Breadcrumb;
44
+ export const Button = wrapComponent(
45
+ rawComponents.Button,
46
+ ) as typeof rawComponents.Button;
47
+ export const Card = wrapComponent(
48
+ rawComponents.Card,
49
+ ) as typeof rawComponents.Card;
50
+ export const Checkbox = wrapComponent(
51
+ rawComponents.Checkbox,
52
+ ) as typeof rawComponents.Checkbox;
53
+ export const CheckboxGroup = wrapComponent(
54
+ rawComponents.CheckboxGroup,
55
+ ) as typeof rawComponents.CheckboxGroup;
56
+ export const Chip = wrapComponent(
57
+ rawComponents.Chip,
58
+ ) as typeof rawComponents.Chip;
59
+ export const DatePicker = wrapComponent(
60
+ rawComponents.DatePicker,
61
+ ) as typeof rawComponents.DatePicker;
62
+ export const Dropdown = wrapComponent(
63
+ rawComponents.Dropdown,
64
+ ) as typeof rawComponents.Dropdown;
65
+ export const FileInput = wrapComponent(
66
+ rawComponents.FileInput,
67
+ ) as typeof rawComponents.FileInput;
68
+ export const FileUpload = wrapComponent(
69
+ rawComponents.FileUpload,
70
+ ) as typeof rawComponents.FileUpload;
71
+ export const FormControlLayout = wrapComponent(
72
+ rawComponents.FormControlLayout,
73
+ ) as typeof rawComponents.FormControlLayout;
74
+ export const FormControlWrapper = wrapComponent(
75
+ rawComponents.FormControlWrapper,
76
+ ) as typeof rawComponents.FormControlWrapper;
77
+ export const Heading = wrapComponent(
78
+ rawComponents.Heading,
79
+ ) as typeof rawComponents.Heading;
80
+ export const HoverCard = wrapComponent(
81
+ rawComponents.HoverCard,
82
+ ) as typeof rawComponents.HoverCard;
83
+ export const Label = wrapComponent(
84
+ rawComponents.Label,
85
+ ) as typeof rawComponents.Label;
86
+ export const Link = wrapComponent(
87
+ rawComponents.Link,
88
+ ) as typeof rawComponents.Link;
89
+ export const Loader = wrapComponent(
90
+ rawComponents.Loader,
91
+ ) as typeof rawComponents.Loader;
92
+ export const Menu = wrapComponent(
93
+ rawComponents.Menu,
94
+ ) as typeof rawComponents.Menu;
95
+ export const MenuItem = wrapComponent(
96
+ rawComponents.MenuItem,
97
+ ) as typeof rawComponents.MenuItem;
98
+ export const MenuDivider = wrapComponent(
99
+ rawComponents.MenuDivider,
100
+ ) as typeof rawComponents.MenuDivider;
101
+ export const Modal = wrapComponent(
102
+ rawComponents.Modal,
103
+ ) as typeof rawComponents.Modal;
104
+ export const NumberInput = wrapComponent(
105
+ rawComponents.NumberInput,
106
+ ) as typeof rawComponents.NumberInput;
107
+ export const Pagination = wrapComponent(
108
+ rawComponents.Pagination,
109
+ ) as typeof rawComponents.Pagination;
110
+ export const Panel = wrapComponent(
111
+ rawComponents.Panel,
112
+ ) as typeof rawComponents.Panel;
113
+ export const PanelFooter = wrapComponent(
114
+ rawComponents.PanelFooter,
115
+ ) as typeof rawComponents.PanelFooter;
116
+ export const Popover = wrapComponent(
117
+ rawComponents.Popover,
118
+ ) as typeof rawComponents.Popover;
119
+ export const Radio = wrapComponent(
120
+ rawComponents.Radio,
121
+ ) as typeof rawComponents.Radio;
122
+ export const RadioGroup = wrapComponent(
123
+ rawComponents.RadioGroup,
124
+ ) as typeof rawComponents.RadioGroup;
125
+ export const ReadOnlyField = wrapComponent(
126
+ rawComponents.ReadOnlyField,
127
+ ) as typeof rawComponents.ReadOnlyField;
128
+ export const SegmentedControl = wrapComponent(
129
+ rawComponents.SegmentedControl,
130
+ ) as typeof rawComponents.SegmentedControl;
131
+ export const Slider = wrapComponent(
132
+ rawComponents.Slider,
133
+ ) as typeof rawComponents.Slider;
134
+ export const Stepper = wrapComponent(
135
+ rawComponents.Stepper,
136
+ ) as typeof rawComponents.Stepper;
137
+ export const Switch = wrapComponent(
138
+ rawComponents.Switch,
139
+ ) as typeof rawComponents.Switch;
140
+ export const SwitchGroup = wrapComponent(
141
+ rawComponents.SwitchGroup,
142
+ ) as typeof rawComponents.SwitchGroup;
143
+ export const Table = wrapComponent(
144
+ rawComponents.Table,
145
+ ) as typeof rawComponents.Table;
146
+ export const Tab = wrapComponent(rawComponents.Tab) as typeof rawComponents.Tab;
147
+ export const TabPanel = wrapComponent(
148
+ rawComponents.TabPanel,
149
+ ) as typeof rawComponents.TabPanel;
150
+ export const Tabs = wrapComponent(
151
+ rawComponents.Tabs,
152
+ ) as typeof rawComponents.Tabs;
153
+ export const Text = wrapComponent(
154
+ rawComponents.Text,
155
+ ) as typeof rawComponents.Text;
156
+ export const TextArea = wrapComponent(
157
+ rawComponents.TextArea,
158
+ ) as typeof rawComponents.TextArea;
159
+ export const TextField = wrapComponent(
160
+ rawComponents.TextField,
161
+ ) as typeof rawComponents.TextField;
162
+ export const TimePicker = wrapComponent(
163
+ rawComponents.TimePicker,
164
+ ) as typeof rawComponents.TimePicker;
165
+ export const Timeline = wrapComponent(
166
+ rawComponents.Timeline,
167
+ ) as typeof rawComponents.Timeline;
168
+ export const TimelineItem = wrapComponent(
169
+ rawComponents.TimelineItem,
170
+ ) as typeof rawComponents.TimelineItem;
171
+ export const Toast = wrapComponent(
172
+ rawComponents.Toast,
173
+ ) as typeof rawComponents.Toast;
174
+ export const Tooltip = wrapComponent(
175
+ rawComponents.Tooltip,
176
+ ) as typeof rawComponents.Tooltip;
177
+ export const TransferList = wrapComponent(
178
+ rawComponents.TransferList,
179
+ ) as typeof rawComponents.TransferList;
180
+ export const Tree = wrapComponent(
181
+ rawComponents.Tree,
182
+ ) as typeof rawComponents.Tree;
183
+
184
+ export type {
185
+ RecursicaAutocompleteProps,
186
+ RecursicaDropdownProps,
187
+ RecursicaFormControlWrapperProps,
188
+ RecursicaNumberInputProps,
189
+ RecursicaSliderProps,
190
+ RecursicaTextAreaProps,
191
+ RecursicaTextFieldProps,
192
+ RecursicaTimePickerProps,
193
+ RecursicaToastProps,
194
+ } from "./components";
@@ -0,0 +1,9 @@
1
+ export interface ComboboxItem {
2
+ value: string;
3
+ label: string;
4
+ disabled?: boolean;
5
+ // icon?: IconName;
6
+ onClick?: () => void;
7
+ }
8
+
9
+ // Export other shared types here
@@ -0,0 +1,9 @@
1
+ declare module "*.scss" {
2
+ const content: { [className: string]: string };
3
+ export default content;
4
+ }
5
+
6
+ declare module "*.module.scss" {
7
+ const content: { [className: string]: string };
8
+ export default content;
9
+ }
@@ -0,0 +1,23 @@
1
+ import { useEffect } from "react";
2
+ import { addons } from "storybook/internal/preview-api";
3
+ import { DARK_MODE_EVENT_NAME } from "storybook-dark-mode";
4
+
5
+ const channel = addons.getChannel();
6
+
7
+ export function ColorSchemeWrapper({
8
+ children,
9
+ }: {
10
+ children: React.ReactNode;
11
+ }) {
12
+ useEffect(() => {
13
+ const handleColorScheme = (value: boolean) => {
14
+ const theme = value ? "dark" : "light";
15
+ document.documentElement.setAttribute("data-recursica-theme", theme);
16
+ };
17
+
18
+ channel.on(DARK_MODE_EVENT_NAME, handleColorScheme);
19
+ return () => channel.off(DARK_MODE_EVENT_NAME, handleColorScheme);
20
+ }, []);
21
+
22
+ return <>{children}</>;
23
+ }
@@ -0,0 +1 @@
1
+ export { type RequireAccessibleLabel } from "@recursica/adapter-common";
@@ -0,0 +1,36 @@
1
+ import React from "react";
2
+
3
+ /**
4
+ * Helper function for copy text to clipboard
5
+ * @param {string} textToCopy The text string for copying to the clipboard
6
+ * @param {element|node} componentRef The ref of the component that we want to trigger the copy
7
+ */
8
+ const copyToClipboard = (
9
+ textToCopy: string,
10
+ componentRef: React.RefObject<HTMLElement | null>,
11
+ ): Promise<void> => {
12
+ const currentFocus = document.activeElement as HTMLInputElement;
13
+ return new Promise((resolve, reject) => {
14
+ if (componentRef && componentRef.current) {
15
+ const textArea = document.createElement("textarea");
16
+ textArea.readOnly = true;
17
+ textArea.defaultValue = textToCopy;
18
+ componentRef.current.appendChild(textArea);
19
+ textArea.select();
20
+ const wasCopied = document.execCommand("copy");
21
+ componentRef.current.removeChild(textArea);
22
+ if (currentFocus) {
23
+ currentFocus.focus();
24
+ }
25
+ if (wasCopied) {
26
+ resolve();
27
+ } else {
28
+ reject(new Error("Failed to copy"));
29
+ }
30
+ } else {
31
+ reject(new Error("Copy area reference is not defined"));
32
+ }
33
+ });
34
+ };
35
+
36
+ export { copyToClipboard };
@@ -0,0 +1,85 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import {
3
+ BLOCKED_STYLING_KEYS,
4
+ SPACING_MAP,
5
+ filterStylingProps,
6
+ filterSxProp,
7
+ } from "./filterStylingProps";
8
+
9
+ describe("filterStylingProps", () => {
10
+ it("strips every blocked styling key by default", () => {
11
+ const props = Object.fromEntries(
12
+ BLOCKED_STYLING_KEYS.map((key) => [key, "should-be-removed"]),
13
+ );
14
+
15
+ const sanitized = filterStylingProps(props);
16
+
17
+ for (const key of BLOCKED_STYLING_KEYS) {
18
+ expect(sanitized).not.toHaveProperty(key);
19
+ }
20
+ });
21
+
22
+ it("keeps props that aren't blocked styling keys", () => {
23
+ const sanitized = filterStylingProps({
24
+ disabled: true,
25
+ "aria-label": "Submit",
26
+ });
27
+
28
+ expect(sanitized).toEqual({ disabled: true, "aria-label": "Submit" });
29
+ });
30
+
31
+ it("keeps layout props (e.g. margin) untouched when not a rec- token", () => {
32
+ const sanitized = filterStylingProps({ m: "16px" });
33
+
34
+ expect(sanitized).toEqual({ m: "16px" });
35
+ });
36
+
37
+ it("maps rec- spacing tokens on layout props to their CSS variable", () => {
38
+ const sanitized = filterStylingProps({ m: "rec-lg", gap: "rec-sm" });
39
+
40
+ expect(sanitized).toEqual({
41
+ m: SPACING_MAP["rec-lg"],
42
+ gap: SPACING_MAP["rec-sm"],
43
+ });
44
+ });
45
+
46
+ it("does not map rec- tokens on props that aren't layout props", () => {
47
+ const sanitized = filterStylingProps({ "data-testid": "rec-lg" });
48
+
49
+ expect(sanitized).toEqual({ "data-testid": "rec-lg" });
50
+ });
51
+
52
+ it("leaves an unrecognized rec- value alone", () => {
53
+ const sanitized = filterStylingProps({ m: "rec-not-a-real-token" });
54
+
55
+ expect(sanitized).toEqual({ m: "rec-not-a-real-token" });
56
+ });
57
+
58
+ it("bypasses all filtering when overStyled is true", () => {
59
+ const props = { className: "custom", sx: { color: "red" }, m: "rec-lg" };
60
+
61
+ expect(filterStylingProps(props, true)).toEqual(props);
62
+ });
63
+
64
+ it("does not mutate the input props object", () => {
65
+ const props = { className: "custom", m: "rec-lg" };
66
+
67
+ filterStylingProps(props);
68
+
69
+ expect(props).toEqual({ className: "custom", m: "rec-lg" });
70
+ });
71
+ });
72
+
73
+ describe("filterSxProp", () => {
74
+ it("removes only the sx prop", () => {
75
+ const sanitized = filterSxProp({ sx: { color: "red" }, disabled: true });
76
+
77
+ expect(sanitized).toEqual({ disabled: true });
78
+ });
79
+
80
+ it("is a no-op when sx isn't present", () => {
81
+ const props = { disabled: true };
82
+
83
+ expect(filterSxProp(props)).toEqual(props);
84
+ });
85
+ });
@@ -0,0 +1,143 @@
1
+ /**
2
+ * filterStylingProps
3
+ *
4
+ * This utility acts as the central gatekeeper for strict design-system adherence across
5
+ * all Recursica components mapped over MUI.
6
+ *
7
+ * PHILOSOPHY:
8
+ * Recursica components are designed to be explicitly sandboxed tokens. Allowing external
9
+ * `className` or MUI style props (`sx`, `classes`, etc.) breaks the design system by
10
+ * allowing developers to leak arbitrary designs into components.
11
+ *
12
+ * By default (`overStyled=false`), this utility actively prevents developers from overriding
13
+ * internal component styles (such as background, colors, typography, or internal classes).
14
+ * It safely *permits* external layout overrides (like `margin` / `m`) so that components can
15
+ * easily be spaced alongside other DOM elements.
16
+ *
17
+ * If a developer passes `overStyled={true}`, this filter allows all styling properties to
18
+ * flow through to the underlying MUI component natively, at the developer's own risk.
19
+ *
20
+ * @param props - The raw component props passed down to the wrapper
21
+ * @param overStyled - Boolean toggle to allow raw external styling. Defaults to false.
22
+ * @returns Sanitized component props safe for internal styling merging
23
+ */
24
+
25
+ export const BLOCKED_STYLING_KEYS = [
26
+ "className",
27
+ "classes", // MUI specific nested class overrides
28
+ "style",
29
+ "sx", // MUI's primary system style prop
30
+
31
+ // Potential Box/Typography system props to block (if we wrap those)
32
+ "color",
33
+ "bgcolor",
34
+ "backgroundColor",
35
+ "typography",
36
+ "fontFamily",
37
+ "fontSize",
38
+ "fontWeight",
39
+ "lineHeight",
40
+ "letterSpacing",
41
+ "textAlign",
42
+ "border",
43
+ "borderTop",
44
+ "borderBottom",
45
+ "borderLeft",
46
+ "borderRight",
47
+ "borderColor",
48
+ "borderRadius",
49
+ "boxShadow",
50
+ "display",
51
+ "position",
52
+ "zIndex",
53
+ ] as const;
54
+ export {
55
+ type RecursicaSpacing,
56
+ type RecursicaSize,
57
+ type RecursicaOverStyled,
58
+ type BlockedStylingKeys,
59
+ type ForbiddenStyles,
60
+ type WithRecursicaSpacing,
61
+ omitUnsupportedProps,
62
+ withCallerOverride,
63
+ mergeClassNames,
64
+ mergeStyles,
65
+ } from "@recursica/adapter-common";
66
+
67
+ const LAYOUT_PROPS = new Set([
68
+ "m",
69
+ "my",
70
+ "mx",
71
+ "mt",
72
+ "mb",
73
+ "ml",
74
+ "mr",
75
+ "p",
76
+ "py",
77
+ "px",
78
+ "pt",
79
+ "pb",
80
+ "pl",
81
+ "pr",
82
+ "gap",
83
+ "rowGap",
84
+ "columnGap",
85
+ "top",
86
+ "left",
87
+ "bottom",
88
+ "right",
89
+ ]);
90
+
91
+ export const SPACING_MAP: Record<string, string> = {
92
+ "rec-none": "var(--recursica_brand_dimensions_general_none)",
93
+ "rec-sm": "var(--recursica_brand_dimensions_general_sm)",
94
+ "rec-default": "var(--recursica_brand_dimensions_general_default)",
95
+ "rec-md": "var(--recursica_brand_dimensions_general_md)",
96
+ "rec-lg": "var(--recursica_brand_dimensions_general_lg)",
97
+ "rec-xl": "var(--recursica_brand_dimensions_general_xl)",
98
+ "rec-2xl": "var(--recursica_brand_dimensions_general_2xl)",
99
+ };
100
+
101
+ export type OmitSx<T> = Omit<T, "sx">;
102
+
103
+ export function filterSxProp<T extends Record<string, unknown>>(
104
+ props: T,
105
+ ): Omit<T, "sx"> {
106
+ const sanitized = { ...props };
107
+ if ("sx" in sanitized) {
108
+ delete sanitized["sx"];
109
+ }
110
+ return sanitized as Omit<T, "sx">;
111
+ }
112
+
113
+ export function filterStylingProps<T extends Record<string, unknown>>(
114
+ props: T,
115
+ overStyled?: boolean,
116
+ ): Partial<T> {
117
+ if (overStyled) {
118
+ return props;
119
+ }
120
+
121
+ const sanitized = { ...props };
122
+
123
+ for (const prop of BLOCKED_STYLING_KEYS) {
124
+ if (prop in sanitized) {
125
+ delete sanitized[prop];
126
+ }
127
+ }
128
+
129
+ // Intercept Recursica spacing tokens for valid layout properties
130
+ for (const [key, value] of Object.entries(sanitized)) {
131
+ if (
132
+ typeof value === "string" &&
133
+ value.startsWith("rec-") &&
134
+ LAYOUT_PROPS.has(key)
135
+ ) {
136
+ if (value in SPACING_MAP) {
137
+ (sanitized as Record<string, unknown>)[key] = SPACING_MAP[value];
138
+ }
139
+ }
140
+ }
141
+
142
+ return sanitized;
143
+ }
@@ -0,0 +1 @@
1
+ export * from "./copyToClipboard";
@@ -0,0 +1,51 @@
1
+ import React from "react";
2
+ import { type RecursicaComboboxItemWithLabel } from "@recursica/adapter-common";
3
+
4
+ export interface RichOptionClassNames {
5
+ optionContent: string;
6
+ optionIcon: string;
7
+ optionText: string;
8
+ /** Combined with `optionText` when `wrapItemText` is true — see `renderRichOptionContent` below. */
9
+ optionTextWrap: string;
10
+ optionSupportingText: string;
11
+ }
12
+
13
+ /**
14
+ * `MenuItem`/option children for Dropdown/Autocomplete that renders `leadingIcon`/`supportingText`
15
+ * (see MANTINE_ADAPTER_RICH_OPTION_DATA.md) inside the row. Falls back to plain `label` when
16
+ * neither is present, so items without the new fields render exactly as before.
17
+ *
18
+ * `wrapItemText` (default `false`) controls whether `label`/`supportingText` wrap onto additional
19
+ * lines or truncate to a single line with an ellipsis.
20
+ */
21
+ export function renderRichOptionContent(
22
+ item: Pick<
23
+ RecursicaComboboxItemWithLabel,
24
+ "label" | "leadingIcon" | "supportingText"
25
+ >,
26
+ classNames: RichOptionClassNames,
27
+ wrapItemText = false,
28
+ ): React.ReactNode {
29
+ const { label, leadingIcon, supportingText } = item;
30
+ if (!leadingIcon && !supportingText) {
31
+ return label;
32
+ }
33
+ const optionTextClassName = wrapItemText
34
+ ? `${classNames.optionText} ${classNames.optionTextWrap}`
35
+ : classNames.optionText;
36
+ return (
37
+ <span className={classNames.optionContent}>
38
+ {leadingIcon && (
39
+ <span className={classNames.optionIcon}>{leadingIcon}</span>
40
+ )}
41
+ <span className={optionTextClassName}>
42
+ <span>{label}</span>
43
+ {supportingText && (
44
+ <span className={classNames.optionSupportingText}>
45
+ {supportingText}
46
+ </span>
47
+ )}
48
+ </span>
49
+ </span>
50
+ );
51
+ }